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 示例中完成的那样。
我正在创建一个应用程序。我没有任何 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 示例中完成的那样。