bob*_*bmc 14 java-native-interface storage android android-ndk
除了在SD卡上,还有其他方法可以在其他地方写入文件吗?
我在文件系统上尝试了很多不同的路径但是fopen总是返回NULL,除了我在/ sdcard /中写入/读取的任何文件...
还有别的东西相当于:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Run Code Online (Sandbox Code Playgroud)
那允许你在文件系统上写一些东西?
obe*_*lot 18
您始终可以访问放置应用程序的目录.
这个目录通常是:
data/data/<Your_package_name_usually
com.android.appName>/files/<your_filename>
但更好地使用getFilesDir()以确保有效的文件路径与Android的未来版本更改.
如果您想使用外部存储,请确保将此行代码放在应用清单中以获得许可.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Run Code Online (Sandbox Code Playgroud)
然后使用sdcard目录:
getExternalStorageDirectory();
//usually : /sdcard/<your_filename>
否则,您可以root设备并获得对整个文件系统的访问权限.但在使用您的应用程序之前,您必须要求所有应用用户在其设备上获得root访问权限.有些游戏使用这种做法,但我不推荐它.如果你仍然想这样做,查找Superuser
Android的应用程序,它是免费的和可信任的.
获得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);
}
Run Code Online (Sandbox Code Playgroud)
编辑:
您可能需要在第一次使用它之前手动创建C中的/ files:
int result_code = mkdir("/data/data/com.app/files/", 0770)
干杯!
| 归档时间: |
|
| 查看次数: |
27558 次 |
| 最近记录: |