Android 6.0 ~ Android 9.0 版本(新特性)适配手册

Android6.0, targetSdkVersion 23, Marshmallow(棉花糖) 

动态权限管理(Runtime Permissions):所有涉及用户隐私的权限,用户可以自己去设置管理了

将标记为危险的权限从安装时权限(Install Time Permission)模型移动到运行时权限模型(Runtime Permissions)

注:6.0以上版本App不适配权限管理,如果设置权限,会导致空指针的异常时,APP会崩溃。

参考文章:谈谈Android 6.0 的动态权限管理_唯鹿


Android 7.0, 24 / Android 7.1.1, 25, Nougat(牛轧糖)

参考文章:

Android 7.0 行为变更 通过FileProvider在应用间共享文件_Hongyang

Android7.0适配_Chay_Chan

1.应用间共享文件

报错:android.os.FileUriExposedException

google官方解释:对于面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止在您的应用外部公开file:// URI。
要在应用间共享文件,您应发送一项 content:// URI,并授予 URI 临时访问权限。进行此授权的最简单方式是使用 FileProvider 类。

使用content://替代file://

使用FileProvider兼容安装apk,报错Permission Denial

对于权限,有两种方式:

        方式一:为Intent.addFlags,该方式主要用于针对intent.setData,setDataAndType以及setClipData相关方式传递uri的。

        方式二:为grantUriPermission来进行授权

2.APK signature scheme v2
3.PopupWindow位置不正确
4.后台优化,在Android 7.0中删除了三项隐式广播
5.多语言区域支持
6.通知栏适配

参考文章 Android通知栏介绍与适配总结

7.Android 7.0 WebView 部分机型打不开

Q:https请求 webview 有证书校验,
A:通过重写onReceivedSslError 过滤掉 部分错误

参考文章 Android 7.0 WebView 部分机型打不开

8.Android 7.0 WebView 二级跳转后界面空白

Q:第一个加载webview显示是完全没有问题的,但当点击webview内容进行二级页面跳转后,就会显示一片空白,
A:重写shouldOverrideUrlLoading,当Android版本为5.0以上,获取request.getUrl().toString()

参考文章 Android7.0使用webview遇到的坑

9.Toast导致的BadTokenException

参考文章 同学,你的系统Toast可能需要修复一下


Android 8.0, 26 / Android8.1, 27, Oreo(奥利奥)

参考文章:Android 8.0适配指北  

1.运行时权限 

系统只会授予应用明确请求的权限

2.通知适配

给通知进行分类

3.悬浮窗适配

应用必须使用名为 TYPE_APPLICATION_OVERLAY 的新窗口类型
也就是说需要在之前的基础上判断一下:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    mWindowParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
}else {
    mWindowParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT
}

当然记得需要有权限

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

4.安装APK

Android 8.0去除了“允许未知来源”选项
需要在manifest文件中添加安装未知来源应用的权限,

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

5.透明主题的Activity

只有全屏不透明的activity才可以设置方向
Q:java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation

A:要么去掉对应activity中的 screenOrientation 属性,或者对应设置方向的代码。
   要么舍弃透明效果,在它的Theme中添加:
   <item name="android:windowIsTranslucent">false</item>

6.集合的处理

Q:AbstractCollection.removeAll(null) 和 AbstractCollection.retainAll(null)始终引发 NullPointerException;

7.后台执行限制

后台服务限制
广播限制:无法使用清单注册隐式广播


Android 9.0, 28, Pie(派)

1.http请求失败

默认情况下启用网络传输层安全协议 (TLS),已停用明文支持。也就是不允许使用http请求,要求使用https。

2.Apache HTTP 客户端弃用

想继续使用Apache HTTP,在manifest的<application>节点下添加<uses-library android:name="org.apache.http.legacy" android:required="false"/>

3.前台服务

调用startForegroundService或 startForeground 方法来启动一个前台服务
添加FOREGROUND_SERVICE权限,<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

4.启动Activity

非Activity环境中(比如Service,Application)启动Activity,否则会崩溃报错
这类问题一般会在点击推送消息跳转页面这类场景,解决方法就是 Intent 中添加标志FLAG_ACTIVITY_NEW_TASK,

5.异形屏适配

Android P 刘海屏适配全攻略
Android刘海屏、水滴屏全面屏适配方案

6.其他

在 Android 9 中,调用Build.SERIAL 会始终返回 UNKNOWN 以保护用户的隐私。如果你的应用需要访问设备的硬件序列号,那么需要先请求 READ_PHONE_STATE 权限,然后调用 Build.getSerial()。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值