当前位置:   article > 正文

Android13的一些新变化_sharedusermaxsdkversion

sharedusermaxsdkversion

新项目要求在android13的基础上开发,基于此调查13的一些变化

1.本地sdcard权限申请改变

原来的:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

 细化媒体权限改为:

<uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>

Android 13适配_凌云志 !的博客-CSDN博客

2.intentFilter

Intent 过滤器会屏蔽不匹配的 intent

当 App 以 Android 13(33) 或更高版本为 Target 的其他应用的导出组件发送 intent 时,仅当该 intent 与接收应用中的 <intent-filter> 元素匹配时,系统才会传送该 intent,换言之系统会屏蔽所有不匹配的 intent,但以下情况除外:

  • 发送给其他应用的未声明任何 intent 过滤器的组件的 intent;
  • 发送给你应用中的其他组件的 intent;
  • 由系统发送的 intent;
  • 由具有根级特权的用户发送的 intent;

3.静态广播Broadcast

从Android 13开始,以Android13(API 33+)为目标平台的应用,注册静态广播时,需设置对其他应用的可见性(需要先启用DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED 开发者选项 -> App Compatibility Changes ->Your App->DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED):

若对其他应用可见,广播注册时设置:Context.RECEIVER_EXPORTED
若仅应用内使用,广播注册时设置:Context.RECEIVER_NOT_EXPORTED

当你的 Receiver 声明了 RECEIVER_NOT_EXPORTED 的话,其他 App 向其发送广播会失败,并打印如下日志提醒你的 Receiver 需要公开:

BroadcastQueue: Exported Denial: sending Intent { act=com.example.demoapplication.RECEIVER flg=0x10 }, action: com.example.demoapplication.RECEIVER from com.example.tiramisu_demo (uid=10161)

due to receiver ProcessRecord{8e5f11c 16942:com.example.demoapplication/u0a158} (uid 10158) not specifying RECEIVER_EXPORTED

豁免:
需要留意的是,系统级广播是受保护的,普通 App 没有权限发送。

所以只是监听系统广播的话,动态注册的 Receiver 无需指定上述 flag。即便指定了 RECEIVER_NOT_EXPORTED,和静态注册方式一致也能正常接收、不受影响。

适配办法
找到所有动态注册 Broadcast Receiver 的代码。如果监听的包含非系统广播,请根据是否公开给其他 App 的需要使用来添加 flag 的声明。
 

  1. private void registerTestReceiver() {
  2. IntentFilter filter = new IntentFilter();
  3. filter.addAction("com.xiaxl.test.action");
  4. // api >= 33
  5. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
  6. // 跨应用间使用
  7. MainActivity.this.registerReceiver(mTestReceiver, filter, Context.RECEIVER_EXPORTED);
  8. // 应用内使用
  9. //MainActivity.this.registerReceiver(mTestReceiver, filter, Context.RECEIVER_EXPORTED);
  10. }
  11. // api <= 32
  12. else {
  13. MainActivity.this.registerReceiver(mTestReceiver, filter);
  14. }
  15. }

Android 13 新特性及适配指南_android13特性_bjxiaxueliang的博客-CSDN博客

4.wifi权限:

新增NEARBY_WIFI_DEVICES权限,将原有的ACCESS_FINE_LOCATION权限 与 Wi-Fi能力使用进行了区分,原来申请wifi权限的同时还会申请位置请求(避免早先开发者使用Wi-Fi能力时,需要请求用户位置权限,从而引起用户的歧义)

5.剪切板:

从Android 13(API 33)开始,Android剪切板新增了一项新API:
Android 13(API 33)开始,用户可以选择使用API PersistableBundle#(ClipDescription.EXTRA_IS_SENSITIVE, true)隐藏要复制到剪切板的用户账户、密码登敏感信息。

6.废弃android:sharedUserId="android.uid.system"

共享用户 ID 会在软件包管理器中导致具有不确定性的行为。因此,强烈建议不要使用它,并且在未来的 Android 版本中会将其移除。相反,应用应使用适当的通信机制(例如服务和 content provider),在共享组件之间实现互操作性。请注意,现有应用无法移除此值,因为不支持不使用共享用户 ID。这类应用应添加 android:sharedUserMaxSdkVersion="32",以免在新用户安装时使用共享用户 ID。

7.其他

图库的修改,图标适配等

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号