Вопрос по android – android_app-> Activity-> internalDataPath по-прежнему NULL в 2.3.8 NDK r8

6

Чтобы указать, где я тестировал HTC Desire S, Android 2.3.5 и ndk-r8.

У меня проблемы с ndk-r7b и ndk-r8 при доступе к локальным каталогам чтения и записи с использованием android_app-> activity-> internalDataPath или externalDataPath, поскольку они оба имеют значение NULL. Я вижу, что это было опубликовано в предыдущих версиях, и обновление собиралось исправить это согласно этому сообщению: -

Как мне записать в файловую систему внутреннего хранилища с NativeActivity?

Теперь, возможно, это исправлено в Ice Cream Sandwich, но это далеко от идеала, поскольку моя цепочка инструментов отлично поддерживает обратную совместимость, чтобы ловить тех, кто не обновляется. Поэтому у меня вопрос: есть ли известное исправление или мне нужно вручную добавить структуру каталогов, например "/data/data/com.example.mytest/files/somefile.dat", пока она не будет исправлена?

Вы когда-нибудь находили решение этой проблемы? Mike Weir

Ваш Ответ

1   ответ
4

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();
}
Спасибо, Феникс, у меня не было возможности вернуться к этому, но да, ваше право использовать JNI для захвата основного пути к данным - это правильный маршрут, а также то, как я его исправил. Dev2rights

Похожие вопросы