微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在某些设备中使用范围存储的 SecurityException

如何解决在某些设备中使用范围存储的 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 举报,一经查实,本站将立刻删除。