外部存储中App自己的目录的路径

时间:2015-06-16 07:12:22

标签: android android-external-storage

在库中,我想返回一个代表外部存储中App自己目录的文件,该方法返回的目录:

context.getExternalFilesDir(null);

但是在API级别19之前使用此方法,需要WRITE_EXTERNAL_STORAGE权限,我不想强​​制用户使用此权限,特别是我的方法只想返回抽象文件而不想创建目录。 / p>

我可以使用此代码:

Environment.getExternalStorageDirectory().getCanonicalPath() + "/Android/data/" + packageName + "/files";

但我认为硬编码不安全。有没有办法在不强迫用户使用WRITE权限的情况下返回该目录?

1 个答案:

答案 0 :(得分:0)

如果您想避免硬编码字符串,可以尝试使用反射。

    Class<?> environmentClass = Environment.class;
    try {
        Field androidDirectoryField = null;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            androidDirectoryField = environmentClass.getDeclaredField("DIR_ANDROID");
        } else {
            androidDirectoryField = environmentClass.getDeclaredField("DIRECTORY_ANDROID");
        }
        androidDirectoryField.setAccessible(true);
        final String externalDir = Environment.getExternalStorageDirectory().getAbsolutePath() 
                + getFilesDir().getAbsolutePath().replaceFirst("data", androidDirectoryField.get(null).toString());

        Log.d(TAG, "external directory " + externalDir);
    } catch (NoSuchFieldException | IllegalAccessException | IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }