【问题标题】:Android NDK Camera Path getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)Android NDK 相机路径 getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)
【发布时间】:2015-04-16 05:52:50
【问题描述】:

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

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

有什么方法可以在完全本机代码中获得相同的功能?有替代方案吗?

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

【问题讨论】:

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


    【解决方案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 示例中所做的那样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-27
      • 2012-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多