Android 在某些设备中使用作用域存储的SecurityException
我在谷歌play上看到了一些设备的崩溃,比如三星和诺基亚,api 29和30 日志: 我的清单文件: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
<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;
}