Android6.0-14的兼容性

1.Android 6.0

     ①新增运行时权限,危险权限需要动态申请

     ②删除了对 Apache HTTP 客户端的支持

   解决方法:必须在build.gradle文件中声明以下编译时依赖项

        android {

        useLibrary 'org.apache.http.legacy'

        }

2.Android 8.0

  ①允许安装未知来源应用,需要在 AndroidManifest.xml 中声明 REQUEST_INSTALL_PACKAGES 权限

       ②Android8.0取消隐式广播移除掉了所有的隐式广播(即清单文件中注册的广播)需要使用显示广播进行注册(即代码注册)

       通知消息需要设置通知渠道才可显示,如下:

   //只需要将渠道加进去,并且在NotificationCompat.Build中加入渠道id

  //只需要将渠道加进去,并且在NotificationCompat.Build中加入渠道id
NotificationManager systemService = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.O){
NotificationChannel notificationChannel = new NotificationChannel("001", "xxx", NotificationManager.IMPORTANCE_MAX);
systemService.createNotificationChannel(notificationChannel);
mBuilder = new NotificationCompat.Builder(this, "001");
}else {
mBuilder = new NotificationCompat.Builder(this);
}
Notification build = mBuilder.setContentTitle("标题").setContentText("内容").setWhen(System.currentTimeMillis()).setSmallIcon(R.mipmap.ic_launcher).build();
systemService.notify(1,build);

         ④使用startService开启service闪退,需要调用startForegroundService方法启动服务

3.Android 9.0

        ①限制了明文流量(即HTTP接口)的网络请求,需要使用使用HTTPS接口

  解决方法:

方式一:在Application属性中添加如下配置:
<application  android:usesCleartextTraffic="true">
方式二:在res目录下新建xml文件夹,并创建network_security_config.xml文件,内容如下:
 <network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>
之后在Application属性中配置 :
<application android:networkSecurityConfig="@xml/network_security_config">

      ②彻底废弃Apache HTTP库,如果想要继续使用,需要在清单文件中添加如下配置:

<application>

<uses-library android:name="org.apache.http.legacy" android:required="false"/>

</application>

      ③访问电话号码,需要申请 READ_CALL_LOG

      ④调用startForegroundService(),需要FOREGROUND_SERVICE权限

      ⑤不允许多进程使用同一目录webview        

解决办法:在app的application类OnCreate方法中加入代码

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {

            val processName = getProcessName()

            if (!"应用包名".equals(processName)) {

                WebView.setDataDirectorySuffix(processName)

            }

     }

4.android 10

    ①引入沙盒存储机制,不需要存储权限

    ②新增加了后台定位权限:ACCESS_BACKGROUND_LOCATION

5.Android 11

     ①查询已安装的应用需要在清单文件中配置

解决办法:需要在应用的清单文件中添加 <queries> 元素,在 <queries> 元素中,你可以按软件包名称、intent 签名或提供程序授权指定软件包。

     ②支持并发使用多个摄像头

     ③更改了读取电话号码权限,需要动态获取READ_PHONE_NUMBERS权限

        TelecomManager类中的 getLine1Number()方法

        TelecomManager类中的 getMsisdn()方法

      自定义Toast被屏蔽

  前后台位置信息访问权限声明 location 的前台服务类型ACCESS_BACKGROUND_LOCATION)

6.Android 12 

     ①大致位置权限(用户可以要求您的应用仅获取大致位置信息。)

        粗略位置: 精确到2平方公里的位置值,请求 ACCESS_COARSE_LOCATION 权限可以获得。

         精确位置: 精确到50米以内的位置值,请求 ACCESS_FINE_LOCATION 权限可以获得

     ②应用休眠(应用几个月没有启动,系统会自动重置授予的所有权限并将您的应用置于休眠状态)

     ③状态栏下拉菜单中新增麦克风和摄像头切换开关

     ④前台服务启动限制

     ⑤精确的闹钟权限

7.Android 13

     ①新增运行时通知权限:android.permission.POST_NOTIFICATIONS

     ②在后台使用身体传感器需要新的权限BODY_SENSORS_BACKGROUND

     ③细化媒体权限

        

     ④新增了使用精确闹钟的权限USE_EXACT_ALARM

8.Android 14

    ① 限制隐式intent(隐式intent仅传递给exported的组件,显式 intent 传送到未导出的组件 带包名的去跳转)

<activity android:name=".AppActivity"

          android:exported="false"> //false 不可导出 true可导出

    <intent-filter>

        <action android:name="com.xxx.xx_ACTION" />

        <category android:name="android.intent.category.DEFAULT" />

    </intent-filter>

</activity>

//跳转不可导出,需要设置包名

Intent explicitIntent =new Intent("com.xxx.xx_ACTION")

explicitIntent.setPackage(context.getPackageName());

context.startActivity(explicitIntent);

    ②在运行时注册的广播接收器必须指定导出行为(动态注册广播接收器,需要设置标记 RECEIVER_EXPORTED 或 RECEIVER_NOT_EXPORTED)

  • 19
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值