2012-05-21 57 views
6

給我說明我在哪裏測試過,HTC Desire S,Android 2.3.5和ndk-r8。android_app-> activity-> internalDataPath在2.3.8 NDK r8仍爲NULL NDK r8

我在使用android_app-> activity-> internalDataPath或externalDataPath訪問本地讀寫目錄時遇到了ndk-r7b和ndk-r8中的問題,因爲它們都是NULL。我看到,這已經張貼在以前的版本和更新正想這個根據這個帖子來解決: -

How do I write to the internal storage file system with NativeActivity?

現在,也許這被固定在冰淇淋三明治但理想是:就我的工具鏈完全支持向後兼容,以捕捉那些不更新的人。所以我的問題是有沒有一個已知的修復,或者我必須手動添加像「/data/data/com.example.mytest/files/somefile.dat」目錄結構,直到它的固定?

+0

你有沒有找到解決這個問題? –

回答

4

從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(); 
} 
+0

感謝鳳凰我沒有機會回到這個,但是你的權利使用JNI來抓取主要數據路徑是正確的路線,也是我如何修復它。 – Dev2rights