除了SD卡之外,还有其他方法可以将文件写入其他位置吗?
我在文件系统上尝试了许多不同的路径,但 fopen 总是返回 NULL,除了我在 /sdcard/... 内写入/读取的任何文件。
还有其他相当于:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
这允许你像在文件系统上写东西一样?
-
您可以随时访问该目录
您的应用程序所在的位置。
该目录通常是:
data/data/<Your_package_name_usually
com.android.appName>/files/<your_filename>
但更好地利用getFilesDir()
到
确保未来的文件路径有效
安卓版本变化。
-
如果您想使用外部存储
相反,请确保您将其放置在
应用程序清单中的代码行
获得许可。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
然后使用 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);
}
Edit :
您可能需要在 C 中手动创建 /files,然后才能第一次使用它:
int result_code = mkdir("/data/data/com.app/files/", 0770)
Cheers !
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)