我正在创建一个应用程序。我没有任何 UI,如果有的话,我正在为此使用 OpenGL。所以简而言之,我没有任何 Java
代码。我正在使用 NativeActivity
示例作为引用。
我的需要是获取依赖于设备的相机路径。在应用程序中,有可用的 Java Activity
,它很简单,如 Here 中所述.
有没有办法在完全原生代码中获得相同的功能?有其他选择吗?
我真的不想添加 java Activity ,因为我已经用 OpenGL 创建了一些东西。添加Java Acivity只是为了得到这个字符串,让我在一段时间内感到很傻。
最佳答案
您可以在您的 native 代码中使用 JNI 来调用您想要的 Java 方法。
在您的 native 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 继承 NativeActivity 并使用 Java Helper 类,就像在 NDK 的 Teapot 示例中完成的那样。
关于java - Android NDK 相机路径 getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29666365/