Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在某些设备中使用作用域存储的SecurityException_Android_Scoped Storage - Fatal编程技术网

Android 在某些设备中使用作用域存储的SecurityException

Android 在某些设备中使用作用域存储的SecurityException,android,scoped-storage,Android,Scoped Storage,我在谷歌play上看到了一些设备的崩溃,比如三星和诺基亚,api 29和30 日志: 我的清单文件: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28" tools:ignore="ScopedStorage" /> <uses-permissio

我在谷歌play上看到了一些设备的崩溃,比如三星和诺基亚,api 29和30

日志:

我的清单文件:

<uses-permission
    android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    android:maxSdkVersion="28"
    tools:ignore="ScopedStorage" />
<uses-permission
    android:name="android.permission.READ_EXTERNAL_STORAGE"
    android:maxSdkVersion="28" />
这在90%的设备中运行良好。
知道为什么其他设备会崩溃吗?

知道为什么其他设备会崩溃吗?
知道。这是因为您没有捕获到这些异常。对于其他异常,您没有告诉您的问题与作用域存储有什么关系,也没有告诉您的代码应该做什么。错误是不要请求权限,在API>28中的新作用域存储中,这可以在没有权限的情况下完成,我只是读取用户使用本机pickerNo选择的文件名。不是在挑选文件的时候。正如我们在日志猫中MainActivity.onCreate(MainActivity.java:88)的FileUtils.getFileName(FileUtils.java:69)中看到的
。所以你在不同的时刻做。直接在onCreate()中创建。所以第二天左右。所有这些都不清楚。问题在于:在FileUtils.getFileName(FileUtils.java:69)处,使用解析器调用查询
<uses-permission
    android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    android:maxSdkVersion="28"
    tools:ignore="ScopedStorage" />
<uses-permission
    android:name="android.permission.READ_EXTERNAL_STORAGE"
    android:maxSdkVersion="28" />
 public static String getFileName(Context context, Uri uri) {
        String result = null;
        if (uri.getScheme().equals("content")) {
            Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
            try {
                if (cursor != null && cursor.moveToFirst()) {
                    result = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
                }
            } finally {
                cursor.close();
            }
        }
        if (result == null) {
            result = uri.getPath();
            int cut = result.lastIndexOf('/');
            if (cut != -1) {
                result = result.substring(cut + 1);
            }
        }
        return result;
    }