Android NDK相机路径getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)

时间:2015-04-16 05:52:50

标签: java android c++ android-ndk gallery

我正在创建一个App。我没有任何UI,如果有的话,我正在使用OpenGL。简而言之,我没有任何Java代码。我使用NativeActivity样本作为参考。

我需要获得相机路径,这取决于设备。在有Java Activity可用的应用中,它很简单,如Here中所述。

有没有办法在完全本机代码中获得相同的功能?还有其他选择吗?

我真的不想添加java活动,因为我已经用OpenGL创建了一些东西。添加Java Acivity只是为了得到这个字符串让我在这段时间里感到愚蠢。

1 个答案:

答案 0 :(得分:1)

您可以使用本机代码中的JNI来调用所需的Java方法。

从您的原生活动中尝试此操作:

JNIEnv *env; 
state->activity->vm->AttachCurrentThread(&env, NULL); 

jclass envClass = env->FindClass("android/os/Environment");
jmethodID getExtStorageDirectoryMethod = env->GetStaticMethodID(envClass, "getExternalStorageDirectory",  "()Ljava/io/File;");
jobject extStorageFile = env->CallStaticObjectMethod(envClass, getExtStorageDirectoryMethod);

jclass fileClass = env->FindClass("java/io/File");
jmethodID getPathMethod = env->GetMethodID(fileClass, "getPath", "()Ljava/lang/String;");
jstring extStoragePath = env->CallObjectMethod(extStorageFile, getPathMethod);
const char* extStoragePathString = env->GetStringUTFChars(extStoragePath);

//use extStoragePathString

env->ReleaseStringUTFChars(extStoragePath, extStoragePathString);
state->activity->vm->DetachCurrentThread();

如果您想使用更多Java方法,您可能需要研究从Java继承NativeActivity并使用Java Helper类,就像在NDK的 Teapot 示例中完成的那样。