【问题标题】:Removable Storage Access in Android with NDK API使用 NDK API 在 Android 中的可移动存储访问
【发布时间】:2017-03-20 06:18:01
【问题描述】:

我的问题应该有点简单,但是我从互联网上搜索了很多,找不到答案。

我可以用下面的代码得到二级可移动存储(sdcard)的路径

String ExternalSdcardPath = System.getenv("SECONDARY_STORAGE") + "/Sample/";

我可以得到这样的路径,/storage/external_SD/Sample/

我尝试使用 NDK API 创建文件 ( fopen(ExternalSdcardPath, "a+"); )

但我无法使用 fopen 创建和读取文件..

你能告诉我如何在可移动路径(secondary_storage)中使用 fopen api 创建和读取文件吗?

【问题讨论】:

    标签: android android-ndk storage external sd-card


    【解决方案1】:

    我可以用下面的代码得到二级可移动存储(sdcard)的路径

    不需要该环境变量存在,更不用说指向有意义的东西了。

    我无法使用 fopen 创建和读取文件

    在 Android 4.4+ 上,您无法直接访问可移动存储上的任意位置的文件系统。

    你能告诉我如何在可移动路径(secondary_storage)中使用 fopen api 创建和读取文件吗?

    直接文件系统访问可移动存储的唯一位置是getExternalFilesDirs()getExternalCacheDirs()getExternalMediaDirs() 返回的位置。这些都是Context 上的所有方法(例如,活动或服务)。如果它们返回 2+ 个值,则第二个和后续值在可移动存储上。您的 Java 代码可以为您的 NDK 代码提供这些路径。

    【讨论】:

    • 感谢您的回答!!我测试了你所说的并且可以获得可移动路径( File[] files = getExternalFilesDirs(""); 和 string path = files[1].getAbsolutePath() ,sdcard/Android/data/my package folder)并在可移动中创建文件storage pacakge 文件夹和我的 NDK 代码。我是否应该获得对其他路径、sdcard/test_folder(不是包文件夹)的访问和读写权限??
    • @Ji.Hoon.Kim:正如我在回答中所写,在 Android 4.4 上,您无法直接访问可移动存储上的任意位置(例如,sdcard/test_folder 应该是什么位置)的文件系统+.
    • 我可以通过 SAF(DocumentFile API、Android 5.0.1+、Lollipop)直接访问可移动存储上任意位置的文件系统。我可以在 Android 5.0.1+ 上使用没有 SAF Google UI 的 SAF 吗?
    • @Ji.Hoon.Kim:DocumentFile API 不是“直接文件系统访问”,正如我使用的短语。 “我可以在 Android 5.0.1+ 上使用没有 SAF Google UI 的 SAF 吗?” - 不。 SAF 背后的要点是允许 用户 以细粒度的方式提供访问权限,这需要用户 UI 来授予这些权限。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 2012-02-28
    • 2018-01-17
    • 1970-01-01
    相关资源
    最近更新 更多