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

Android NDK Camera Path getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)

我正在创建一个应用程序。我没有任何 UI,如果有的话,我正在为此使用 OpenGL。所以简而言之,我没有任何 Java 代码。我正在使用 NativeActivity 示例作为参考。

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

有没有什么方法可以在完全本地代码中获得相同的功能?有其他选择吗?

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

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

用你的母语试试这个 activity:

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 的 subclassing NativeActivity 并使用 Java Helper class,就像在 NDK 的 Teapot 示例中完成的那样。