android_app->activity->internalDataPath 在 2.3.8 NDK r8 中仍然为 NULL

2024-01-29

为了给出我测试的地方的规格,HTC Desire S、Android 2.3.5 和 ndk-r8。

我在 ndk-r7b 和 ndk-r8 中使用 android_app->activity->internalDataPath 或 externalDataPath 访问本地读写目录时遇到问题,因为它们都是 NULL。我看到这已在以前的版本中发布,更新将根据这篇文章修复此问题:-

如何使用 NativeActivity 写入内部存储文件系统? https://stackoverflow.com/questions/6525724/how-do-i-write-to-the-internal-storage-file-system-with-nativeactivity

现在也许这个问题在 Ice Cream Sandwich 中得到了修复,但这远非理想,因为我的工具链完美地支持向后兼容性以捕获那些不更新的人。所以我的问题是是否有已知的修复,或者我是否必须手动添加目录结构,如“/data/data/com.example.mytest/files/somefile.dat”直到其修复?


以下内容来自 NDK,无需使用 Java:

const char* path = app->activity->internalDataPath;
if (!path) {
    JNIEnv* jni;
    app->activity->vm->AttachCurrentThread(&jni, NULL);

    jclass activityClass = jni->GetObjectClass(app->activity->clazz);
    jmethodID getFilesDir = jni->GetMethodID(activityClass, "getFilesDir", "()Ljava/io/File;");
    jobject fileObject = jni->CallObjectMethod(app->activity->clazz, getFilesDir);
    jclass fileClass = jni->GetObjectClass(fileObject);
    jmethodID getAbsolutePath = jni->GetMethodID(fileClass, "getAbsolutePath", "()Ljava/lang/String;");
    jobject pathObject = jni->CallObjectMethod(fileObject, getAbsolutePath);
    path = jni->GetStringUTFChars((jstring)pathObject, NULL);

    jni->DeleteLocalRef(pathObject);
    jni->DeleteLocalRef(fileClass);
    jni->DeleteLocalRef(fileObject);
    jni->DeleteLocalRef(activityClass);

    app->activity->vm->DetachCurrentThread();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android_app->activity->internalDataPath 在 2.3.8 NDK r8 中仍然为 NULL 的相关文章

随机推荐