Android中使用ndkapi的可移动存储访问

Android中使用ndkapi的可移动存储访问,android,android-ndk,storage,external,sd-card,Android,Android Ndk,Storage,External,Sd Card,我的问题应该很简单,但我在网上搜索了很多,找不到答案 我可以用下面的代码获得辅助可移动存储(SD卡)的路径 String ExternalSdcardPath = System.getenv("SECONDARY_STORAGE") + "/Sample/"; 我可以得到这样的路径,/storage/external\u SD/Sample/ 我尝试用NDKAPI(fopen(ExternalSdcardPath,“a+”)创建文件 但我无法使用fopen创建和读取文件 您能告诉我如何在可移动

我的问题应该很简单,但我在网上搜索了很多,找不到答案

我可以用下面的代码获得辅助可移动存储(SD卡)的路径

String ExternalSdcardPath = System.getenv("SECONDARY_STORAGE") + "/Sample/";
我可以得到这样的路径,/storage/external\u SD/Sample/

我尝试用NDKAPI(fopen(ExternalSdcardPath,“a+”)创建文件

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

您能告诉我如何在可移动路径(辅助存储)中使用fopen api创建和读取文件吗

我可以用下面的代码获得辅助可移动存储(SD卡)的路径

String ExternalSdcardPath = System.getenv("SECONDARY_STORAGE") + "/Sample/";
这个环境变量不需要存在,更不用说指向有意义的东西了

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

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

您能告诉我如何在可移动路径(辅助存储)中使用fopen api创建和读取文件吗

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

我可以用下面的代码获得辅助可移动存储(SD卡)的路径

String ExternalSdcardPath = System.getenv("SECONDARY_STORAGE") + "/Sample/";
这个环境变量不需要存在,更不用说指向有意义的东西了

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

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

您能告诉我如何在可移动路径(辅助存储)中使用fopen api创建和读取文件吗


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

谢谢您的回答!!我测试了您所说的内容,可以获取可移动路径(File[]files=getExternalFilesDirs(“”;string path=files[1].getAbsolutePath(),sdcard/Android/data/my package文件夹),并使用我的NDK代码在可移动存储包文件夹中创建文件。我是否应该获得对其他路径sdcard/test_文件夹(非软件包文件夹)的访问和读写权限?@Ji.Hoon.Kim:正如我在回答中所述,您没有对可移动存储上任意位置的直接文件系统访问权限(例如,sdcard/test_文件夹应该是什么)在Android 4.4+上,我可以通过SAF(DocumentFile API、Android 5.0.1+、棒棒糖)直接访问可移动存储上的任意位置。我可以在Android 5.0.1+上使用SAF而不使用SAF Google UI吗?@Ji.Hoon.Kim:
DocumentFile
API不是我所说的“直接文件系统访问”。“我可以在Android 5.0.1+上使用SAF而不使用SAF Google UI吗?”--不可以。SAF背后的要点是允许用户以细粒度的方式提供访问权限,这需要用户的UI来授予这些权限。谢谢你的回答!!我测试了您所说的内容,可以获取可移动路径(File[]files=getExternalFilesDirs(“”;string path=files[1].getAbsolutePath(),sdcard/Android/data/my package文件夹),并使用我的NDK代码在可移动存储包文件夹中创建文件。我是否应该获得对其他路径sdcard/test_文件夹(非软件包文件夹)的访问和读写权限?@Ji.Hoon.Kim:正如我在回答中所述,您没有对可移动存储上任意位置的直接文件系统访问权限(例如,sdcard/test_文件夹应该是什么)在Android 4.4+上,我可以通过SAF(DocumentFile API、Android 5.0.1+、棒棒糖)直接访问可移动存储上的任意位置。我可以在Android 5.0.1+上使用SAF而不使用SAF Google UI吗?@Ji.Hoon.Kim:
DocumentFile
API不是我所说的“直接文件系统访问”。“我可以在Android 5.0.1+上使用SAF而不使用SAF Google UI吗?”——不可以。SAF背后的要点是允许用户以细粒度的方式提供访问权限,这需要用户的UI来授予这些权限。