Android上的DCIM目录路径 - 返回值

时间:2015-05-02 05:31:05

标签: android c++ android-ndk java-native-interface

我要求从Native代码获取DCIM目录路径。我使用以下代码片段:

jclass envClass = env->FindClass("android/os/Environment");
char charParam[] = "Environment.DIRECTORY_DCIM";
jstring jstrParam = env->NewStringUTF(charParam);
jmethodID getExtStorageDirectoryMethod = env->GetStaticMethodID(envClass, "getExternalStoragePublicDirectory",  "(Ljava/lang/String;)Ljava/io/File;");
jobject extStorageFile = env->CallStaticObjectMethod(envClass, getExtStorageDirectoryMethod, jstrParam);
jclass fileClass = env->FindClass("java/io/File");
jmethodID getPathMethod = env->GetMethodID(fileClass, "getPath", "()Ljava/lang/String;");
jstring extStoragePath = (jstring)env->CallObjectMethod(extStorageFile, getPathMethod);
const char* extStoragePathString = env->GetStringUTFChars(extStoragePath,NULL);

//use extStoragePathString
LOGI("DCIM_PATH ==================================== %s", extStoragePathString);

但结果总是[PATH_TO_SD_CARD]/Environment.DIRECTORY_DCIM。我检查了这是几个设备以及模拟器。我在模拟器上创建了DCIM目录。 SD卡的路径是正确的。

作为解决方案,我总是可以继续搜索SD卡上的DCIM目录。因为无论如何在DCIM下,我必须搜索图片在哪里。但是,为什么我不能通往DCIM?

1 个答案:

答案 0 :(得分:3)

Environment.DIRECTORY_DCIM是DCIM文件夹的Environment类中static String defined的限定Java名称。但是,它不是字符串的实际,只是"DCIM"

public static String DIRECTORY_DCIM = "DCIM";

您需要传递String值,而不是变量的Java名称,因此您可以像这样更改代码:

char charParam[] = "DCIM";

将此值作为参数传递等效于调用:

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
在Java中

,假设Environment.DIRECTORY_DCIM被定义为" DCIM"。

但是,如果您不想使用硬编码值,可以从Environment类中查找静态字段,如下所示:

jfieldID fieldId = env->GetStaticFieldID(envClass, "DIRECTORY_DCIM", "Ljava/lang/String;");
jstring jstrParam = (jstring)env->GetStaticObjectField(envClass, fieldId);