使用Android NDK将文件写入SDcard以外的位置?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Android NDK将文件写入SDcard以外的位置?相关的知识,希望对你有一定的参考价值。

除了在SD卡上,还有其他方法可以在其他地方写入文件吗?

我在文件系统上尝试了很多不同的路径但是fopen总是返回NULL,除了我在/ sdcard /中写入/读取的任何文件...

还有别的东西相当于:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

那允许你在文件系统上写一些东西?

答案
  1. 您始终可以访问放置应用程序的目录。 这个目录通常是: data/data/<Your_package_name_usually com.android.appName>/files/<your_filename> 但最好使用getFilesDir()来确保有效的文件路径以及android的未来版本更改。
  2. 如果您想使用外部存储,请确保将此行代码放在应用清单中以获得许可。 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 然后使用sdcard目录: getExternalStorageDirectory(); //usually : /sdcard/<your_filename>
  3. 否则,您可以root设备并获得对整个文件系统的访问权限。但在使用您的应用程序之前,您必须要求所有应用用户在其设备上获得root访问权限。有些游戏使用这种做法,但我不推荐它。如果你还想这样做,请查找适用于android的Superuser应用程序,它是免费且值得信赖的。

获得android目录后,只需创建一个接收jstring参数的JNI本机方法,然后在本机代码中进行设置。将它转换为std :: string,您就可以将它与fopen()一起使用了。

//Inside your java activity
File f = this.getApplicationContext().getFilesDir(); 
LibLoader.setupArchiveDir(f.toString());

//Inside your JNI wrapper
JNIEXPORT bool JNICALL Java_com_android_appName_LibLoader_setupArchiveDir(JNIEnv * env, jobject obj, jstring dir)
{
        const char* temp = env->GetStringUTFChars(dir, NULL);
    std::string stringDir(temp);

        // Will be receive as a std::string inside C++ code 
    MyNativeObjectInC++->SetupArchiveDir(stringDir);
}

编辑:

您可能需要在第一次使用它之前在C中手动创建/ files:

int result_code = mkdir("/data/data/com.app/files/", 0770)

干杯!

另一答案

您可以从应用程序,SDCard和应用程序的特殊数据目录访问两个位置。除非您具有root权限,否则任何其他地方都是禁止的。

以上是关于使用Android NDK将文件写入SDcard以外的位置?的主要内容,如果未能解决你的问题,请参考以下文章

ANDROID - 在 sdcard 中创建文件夹和文本文件并将其写入

权限被拒绝,同时在 Android SDcard 中写入图像文件

Android 外置SDCard读写权限总结

java.io.FileNotFoundException (Permission denied) 尝试写入 Android sdcard 时

从 ndk 写入 Android 显示器

android: 在sdcard上创建的文件在 windows电脑上不显示的问题