2015-05-02 29 views
4

我有从本机代码获取DCIM目录路径的要求。我使用下面的代码片段:Android上的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?

回答

3

Environment.DIRECTORY_DCIM是DCIM文件夹的Environment类中的static String defined的合格Java名称。然而,这不是字符串,这仅仅是"DCIM"的实际

public static String DIRECTORY_DCIM = "DCIM"; 

您需要将字符串值,而不是变量的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); 
+0

牛逼小时ňķY 2 O u!举报 – user2705939

相关问题