Android 上的 DCIM 目录路径 - Return 值
DCIM directory path on Android - Return Value
我需要从本机代码获取 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 的路径?
Environment.DIRECTORY_DCIM
是 static String defined in the Environment
class for the DCIM folder. However, it's isn't the actual value of the String, which is just "DCIM":
的限定 Java 名称
public static String DIRECTORY_DCIM = "DCIM";
您需要传递字符串值,而不是 Java 变量名称,因此您可以这样更改代码:
char charParam[] = "DCIM";
将此值作为参数传递相当于调用:
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
在 Java 中,假设 Environment.DIRECTORY_DCIM
被定义为 "DCIM"。
但是,如果您不想使用硬编码值,您可以从 Environment
class 中查找静态字段,如下所示:
jfieldID fieldId = env->GetStaticFieldID(envClass, "DIRECTORY_DCIM", "Ljava/lang/String;");
jstring jstrParam = (jstring)env->GetStaticObjectField(envClass, fieldId);
我需要从本机代码获取 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 的路径?
Environment.DIRECTORY_DCIM
是 static String defined in the Environment
class for the DCIM folder. However, it's isn't the actual value of the String, which is just "DCIM":
public static String DIRECTORY_DCIM = "DCIM";
您需要传递字符串值,而不是 Java 变量名称,因此您可以这样更改代码:
char charParam[] = "DCIM";
将此值作为参数传递相当于调用:
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
在 Java 中,假设 Environment.DIRECTORY_DCIM
被定义为 "DCIM"。
但是,如果您不想使用硬编码值,您可以从 Environment
class 中查找静态字段,如下所示:
jfieldID fieldId = env->GetStaticFieldID(envClass, "DIRECTORY_DCIM", "Ljava/lang/String;");
jstring jstrParam = (jstring)env->GetStaticObjectField(envClass, fieldId);