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

标签 java android c++ android-ndk gallery

我正在创建一个应用程序。我没有任何 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/

相关文章:

java - 如何禁用 JList 选择更改事件并仅在双击时调用它?

android - 强制 gridview 绘制所有图 block

android - Android 项目中带有外部 jar 的 java.lang.NoClassDefFoundError

c++ - 尝试在自定义 QT Creator 文本编辑器中创建查找和替换循环。我好像无法设置光标位置

Javafx TableView在表格自动刷新时仍然选择最后选择的行

java - 如何在 Google map 上触发 map 事件 < v3

java - dropwizard 0.7 资源测试中缺少消息正文阅读器

android - 图像格式 YUY2 的步幅计算

c++ - 是否在C++标准中定义了memcpy(dest,src,0)?

c++ - 模板模板参数不是类型