Android:在本机代码中读取外部存储

时间:2014-05-31 06:50:49

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

我一直在尝试在我的Java代码中将一些assets复制到external storage,并将目录传递给我的原生C/C++代码进行读取。但问题是,如果设备上有no SD card,则getExternalFilesDir()会返回“storage / emulated / 0 / Android / data / com.example.app / files”,当我传递给native code以进行fopen和fread时,会导致应用程序崩溃。我相信原因是因为目录是人为的或符号链接或类似的东西。但是,即使我在传递给本机代码的路径上使用stdlib.h function realpath(),它仍然会崩溃。但是,如果我在路径中手动替换emulated/0/ emulated/legacy/realpath()突然工作并将其转换为文件存储的实际位置,fread()可以正常使用没有崩溃。不知何故emulated/legacy/是实际的符号链接而emulated/0/是其他的东西?

问题是我想编写长期可靠的代码,无论Android组织外部存储和这些符号链接/虚拟文件系统的方式有何变化。我也希望代码能够运行,无论它运行在哪个设备上(我相信这些模拟目录因设备而异)。

有没有办法让Java中的external storage directory可以写入并可靠地从本机代码中读取,而不执行此操作 替换为遗留 黑客?

感谢您提供任何帮助。

修改:在getPath()返回的getCanonicalPath()上呼叫getAbsolutePath()FilegetExternalFilesDir()都会返回相同的路径。

0 个答案:

没有答案