2012-05-21 7 views
6

Per fornire informazioni su dove ho provato questo, HTC Desire S, Android 2.3.5 e ndk-r8.android_app-> attività-> internalDataPath ancora NULL in 2.3.8 NDK r8

Sto riscontrando problemi in ndk-r7b e in ndk-r8 accedendo alle directory di lettura in lettura locali utilizzando android_app-> activity-> internalDataPath o externalDataPath poiché sono entrambi NULL. Vedo che questo è stato pubblicato nelle versioni precedenti e un aggiornamento è stato di andare a risolvere questo problema in base a questo post: -

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

Ora forse questo si fissa in Ice Cream Sandwich, ma che è ben lungi dall'essere ideale come mio strumento chain supporta perfettamente la retrocompatibilità per catturare chi non si aggiorna. Quindi la mia domanda è se c'è una correzione nota o devo aggiungere manualmente la struttura di directory come "/ data/data/com.example.mytest/files/somefile.dat" fino a quando è stato risolto?

+0

Hai mai trovare una soluzione a questo problema? –

risposta

4

Le seguenti opere NDK senza uso di 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

Grazie Phoenix non avevo avuto la possibilità di tornare a questo, ma sì, la tua destra utilizzando JNI per afferrare il percorso dati principale è la strada giusta e anche come ho risolto. – Dev2rights