如何解决在某些设备中使用范围存储的 SecurityException
我在某些设备(例如三星和诺基亚、api 29 和 30)中查看 google play 崩溃。
日志:
Caused by: java.lang.SecurityException:
at android.os.Parcel.createExceptionorNull (Parcel.java:2385)
at android.os.Parcel.createException (Parcel.java:2369)
at android.os.Parcel.readException (Parcel.java:2352)
at android.os.Parcel.readException (Parcel.java:2294)
at android.app.IActivityManager$Stub$Proxy.getContentProvider (IActivityManager.java:6680)
at android.app.ActivityThread.acquireProvider (ActivityThread.java:7643)
at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider (ContextImpl.java:3090)
at android.content.ContentResolver.acquireUnstableProvider (ContentResolver.java:2484)
at android.content.ContentResolver.query (ContentResolver.java:1170)
at android.content.ContentResolver.query (ContentResolver.java:1118)
at android.content.ContentResolver.query (ContentResolver.java:1074)
at FileUtils.getFileName (FileUtils.java:69)
at MainActivity.onCreate (MainActivity.java:88)
at android.app.Activity.performCreate (Activity.java:8198)
at android.app.Activity.performCreate (Activity.java:8182)
at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1309)
at android.app.ActivityThread.performlaunchActivity (ActivityThread.java:3765)
Caused by: android.os.remoteexception:
at com.android.server.am.ActivityManagerService.getContentProviderImpl (ActivityManagerService.java:8965)
at com.android.server.am.ActivityManagerService.getContentProviderImpl (ActivityManagerService.java:8804)
at com.android.server.am.ActivityManagerService.getContentProvider (ActivityManagerService.java:9505)
at android.app.IActivityManager$Stub.onTransact (IActivityManager.java:2840)
at com.android.server.am.ActivityManagerService.onTransact (ActivityManagerService.java:3617)
我的清单文件:
<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);
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;
}
这在 90% 的设备上运行良好。 知道为什么其他设备会崩溃吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。