Android 13适配

您所在的位置:网站首页 安卓13版本 Android 13适配

Android 13适配

2023-01-20 04:30| 来源: 网络整理| 查看: 265

目录

一. 创建安卓13模拟器或使用安卓13系统真机调试.

 1.下载 Android 13 SDK:

2. 设置模拟器

二.功能变化概览及适配方案

1.读写SD卡权限的调整​​​​​​​

2.撤销权限

3.通知权限的调整

4.后台运行限制

一. 创建安卓13模拟器或使用安卓13系统真机调试.  1.下载 Android 13 SDK: 依次点击 Tools > SDK Manager。在“SDK Platforms”标签页中,选择 Android 13 (Android API 33)。在 SDK Tools 标签页中,选择 Android SDK Build-Tools 33。

        点击OK安装 SDK。

 2. 设置模拟器 依次点击 Tools > AVD Manager > "+ Create Virtual Device".选择"Phone" > "Next" > 选择 API Level 33   创建模拟器即可. 二.功能变化概览及适配方案 1.读写SD卡权限的调整

Android13之前,读取SD卡只需要申请一个权限

但Android13之后,这个权限被细化成了三个,这三个权限需要分别单独去申请。

Manifest.permission.READ_MEDIA_IMAGES Manifest.permission.READ_MEDIA_VIDEO Manifest.permission.READ_MEDIA_AUDIO

适配方案:

如果是升级Android13之前就已经具有读写SDK的权限,那么升级到13之后,自动就会有上述三个权限。

如果是升级Android13之后新装的应用,且targetSDK小于33,申请READ_EXTERNAL_STORAGE权限时,会自动转化为对上述三个权限的申请,申请框只一个.

 如果是升级Android13之后新装的应用,且targetSDK大于等于33,则申请READ_EXTERNAL_STORAGE权限时会自动拒绝(同理WRITE_EXTERNAL_STORAGE也是一样)。必须申请上面三个权限才可以。下午就是安卓13新安装APP,直接申请读写权限被拒绝.

安卓13动态权限兼容处理,打开相册不需要权限,但选择相片之后的操作需要自行测试是否正常.

1.在AndroidManifest.xml文件中添加权限,根据自己需要添加.

2.发起动态权限申请,根据自身需要添加.

String[] list = new String[10]; if (Build.VERSION.SDK_INT >=33){ list[0] = "android.permission.READ_MEDIA_IMAGES"; //图片 list[1] = "android.permission.READ_MEDIA_VIDEO"; //视频 list[2] = "android.permission.READ_MEDIA_AUDIO"; //音频 }else{ list[0] = Manifest.permission.READ_EXTERNAL_STORAGE; } ActivityCompat.requestPermissions(MainActivity.this, list, 000);

下面是只申请图片权限的效果:

3.打开相册方法兼容

public static void openPhotoAlbum(Activity activity) { Intent intent; if (Build.VERSION.SDK_INT >= 33) { //安卓13以上打开相册. intent = new Intent("android.provider.action.PICK_IMAGES"); intent.setType("images/*");//设置只显示图片 /** * 设置选择照片的个数,默认1张时可不添加该属性,大于1的时候再设置. * 可指定图片数量上限为最大数字,调用 MediaStore.getPickImagesMaxLimit(). */ //intent.putExtra("android.provider.extra.PICK_IMAGES_MAX", MediaStore.getPickImagesMaxLimit()); } else { intent = new Intent(Intent.ACTION_PICK); intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); } activity.startActivityForResult(intent, 888); } 2.撤销权限

对不需要使用的权限进行撤销.

现在这张图片是申请了所有读取权限的.

 1.在AndroidManifest.xml中删除准备撤销的视频和音频权限. 2.在代码中把需要撤销的权限保存到List集合,然后调用API接口即可.

if (Build.VERSION.SDK_INT >= 33) { ArrayList permissions = new ArrayList(); permissions.add("android.permission.READ_MEDIA_VIDEO"); permissions.add("android.permission.READ_MEDIA_AUDIO"); revokeSelfPermissionsOnKill(permissions); }

3.撤销完权限之后再看app的权限,如下图已删除视频和音频权限.

3.通知权限的调整

Android13中,notifcation权限改成危险权限,需要动态申请。

简单来说,就是把权限级别升级了,申请方式不变,流程也不变,但是需要申请新的权限,老的已申请的通知权限在13版本上无法使用,即使 targetSDK < 33 也不行。

总结下来,分为三种场景:

1.应用在系统升级到13之前已经有通知权限,则自动授予新的通知权 POST_NOTIFICATIONS。

2.应用在13上新装,targetSDK=33,每次申请该权限时都会弹。如果用户拒绝,下一次还可以继续申请。

适配方案:

首先,targetSdkVersion改为33。

其次,manifest中声明相关权限

最后代码中判断版本进行相关申请,如下:

private void checkAndSendNotification() { if (Build.VERSION.SDK_INT >= 33) { //检查是否有通知权限 NotificationManager manager = getSystemService(NotificationManager.class); boolean enabled = manager.areNotificationsEnabled(); if (!enabled) { String[] strings = {"android.permission.POST_NOTIFICATIONS"}; requestPermissions(strings, 002); return; } sendNotification(); return; } else { //继续执行老版本逻辑 sendNotification(); } } private void sendNotification() { } 4.后台运行限制

安卓13之前,应用的service是可以后台正常执行的。在13之后,某些情况下(比如低电量),会限制service的一些后台行为,比如限制网络的访问等等。用户进行前台互动操作后,则APP可以从受限分区移除。

主要分为三个级别,代码和描述如下:

private void handleAction() {         UsageStatsManager systemService = getSystemService(UsageStatsManager.class);         int appStandbyBucket = systemService.getAppStandbyBucket();         //1.没有任何限制         if (appStandbyBucket             checkPermission.add(Manifest.permission.NEARBY_WIFI_DEVICES);         }else{             checkPermission.add(Manifest.permission.ACCESS_FINE_LOCATION);         }



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3