对于目的版本为Android 13,细化READ_EXTERNAL_STORAGE权限,使用READ_MEDIA_IMAGE、READ_MEDIA_VIDEO、READ_MEDIA_AUDIO更换READ_EXTERNAL_STORAGE; 如果traget=33 没有适配会出现非常
Type of mediaPermission to requestImages and photosREAD_MEDIA_IMAGESVideosREAD_MEDIA_VIDEOAudio filesREAD_MEDIA_AUDIO适配方式
<manifest ...> <!-- Required only if your app targets Android 13. --> <!-- Declare one or more the following permissions only if your app needs to access data that's protected by them. --> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" /> <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" /> <!-- Required to maintain app compatibility. --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" /> <application ...> ... </application></manifest>代码中分版本去判断哀求哪个权限
32及以下版本ActivityCompat.requestPermissions( activity,new String[]{"android.permission.READ_EXTERNAL_STORAGE"},100);33及以上版本ActivityCompat.requestPermissions( activity,new String[]{"android.permission.READ_MEDIA_IMAGES"},100);ActivityCompat.requestPermissions( activity,new String[]{"android.permission.READ_MEDIA_AUDIO"},100);ActivityCompat.requestPermissions( activity,new String[]{"android.permission.READ_MEDIA_VIDEO"},100);2.1.3 在背景使用身体传感器须要新的权限
// This broadcast receiver should be able to receive broadcasts from other apps.// This option causes the same behavior as setting the broadcast receiver's// "exported" attribute to true in your app's manifest.context.registerReceiver(sharedBroadcastReceiver, intentFilter, RECEIVER_EXPORTED);// For app safety reasons, this private broadcast receiver should **NOT**// be able to receive broadcasts from other apps.context.registerReceiver(privateBroadcastReceiver, intentFilter, RECEIVER_NOT_EXPORTED);留意:如果启用了 DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED 兼容性框架更改,则必须为每个广播汲取器指定 RECEIVER_EXPORTED 或 RECEIVER_NOT_EXPORTED。否则,当您实验注册广播汲取器时,系统会抛出 SecurityException。
适配方式可以全局修改 注册的地方加上exported flag 三方sdk中的注册依靠于各SDK平台的适配,我们可以在 Applocation 和 BaseActivity中 复写registerReceiver在复写方法里判断有没有添加RECEIVER_EXPORTED 或 RECEIVER_NOT_EXPORTED,如果没有先手动添加ECEIVER_EXPORTED。
boolean flagExported = (flags & Context.RECEIVER_EXPORTED) != 0; boolean flagNotExported = (flags & Context.RECEIVER_NOT_EXPORTED) != 0;if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && !flagExported && !flagNotExported) { try { intent = super.registerReceiver(receiver, filter, flags|Context.RECEIVER_EXPORTED); } catch (Exception ex) { e.printStackTrace(); }}2.1.5 附近的WIFI装备权限