一、Uri适配
在Android 10 中打开本地资源你会发现这种错误, file:// 不被允许作为一个附加的 Uri 的意图,否则会抛出 FileUriExposedException
android.os.FileUriExposedException: file:///storage/emulated/0/
该如何处理呢?
1.在manifest中申明如下:
<providerandroid:authorities&#61;"你的包名.fileprovider" #一定要是包名否则没有授权哦。android:name&#61;"android.support.v4.content.FileProvider"android:grantUriPermissions&#61;"true"android:exported&#61;"false"><meta-dataandroid:name&#61;"android.support.FILE_PROVIDER_PATHS"android:resource&#61;"&#64;xml/filepaths"/>
provider>
2.在res下新建xml 文件夹&#xff0c;并在其中新建一个filepaths.xml的文件
<paths><root-path path&#61;"." name&#61;"external_storage_root" />
paths>
3.适配打开的Uri
Intent intent &#61; new Intent();
Uri uri &#61; null;
if (Build.VERSION.SDK_INT >&#61; Build.VERSION_CODES.O) {uri &#61; FileProvider.getUriForFile(context, "你的包名.fileprovider", new File(filesPath));intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
} else {uri &#61; Uri.parse("file://" &#43; filesPath);
}
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(Intent.ACTION_VIEW);
若你想为此建立一个公共的lib或者动态获取这些包名&#xff0c;那如何操作呢?
你需要在第一步中&#xff0c;设置authorities为android:authorities&#61;"${applicationId}.fileprovider"&#xff0c;并在第三步中设置FileProvider.getUriForFile(context, context.getPackageName()&#43;".fileprovider", new File(filesPath));
二、Notification导致的崩溃问题
java.lang.IllegalArgumentException: Invalid notification (no valid small icon): Notification(pri&#61;0 ……
解决方法: Android 10中icon不能为空&#xff0c;若是你不想设置&#xff0c;可以设置为-1即可&#xff0c;否则崩溃。
三、.悬浮框权限
报错信息
android.view.WindowManager $ BadTokenException: Unable to add window android.view.ViewRootImpl$W&#64;77869a9 – permission denied for window type 2002
解决方案&#xff1a;
if(Build.VERSION.SDK_INT >&#61; Build.VERSION_CODES.O){type &#61; WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY }
else{type &#61; WindowManager.LayoutParams.TYPE_PHONE
}