1.前言
因为最近在写2个新app,遇到一些适配问题,所以我在这里总结了一下,分享给大家。
2.安卓6.0的适配
6.0权限申请
分组 | 名字 | 分割线 |
PHONE | android.permission.READ_PHONE_STATE |
|
| android.permission.CALL_PHONE |
|
| android.permission.READ_CALL_LOG |
|
| android.permission.ADD_VOICEMAIL |
|
| android.permission.WRITE_CALL_LOG |
|
| android.permission.USE_SIP |
|
| android.permission.PROCESS_OUTGOING_CALLS |
|
CALENDAR | android.permission.READ_CALENDAR |
|
| android.permission.WRITE_CALENDAR |
|
CAMERA | android.permission.CAMERA |
|
CONTACTS | android.permission.READ_CONTACTS |
|
| android.permission.WRITE_CONTACTS |
|
| android.permission.GET_ACCOUNTS |
|
LOCATION | android.permission.ACCESS_FINE_LOCATION |
|
| android.permission.ACCESS_COARSE_LOCATION |
|
MICROPHONE | android.permission.RECORD_AUDIO |
|
SENSORS | android.permission.BODY_SENSORS |
|
SMS | android.permission.SEND_SMS |
|
| android.permission.RECEIVE_SMS |
|
| android.permission.READ_SMS |
|
| android.permission.RECEIVE_WAP_PUSH |
|
| android.permission.RECEIVE_MMS |
|
STORAGE | android.permission.READ_EXTERNAL_STORAGE |
|
| android.permission.WRITE_EXTERNAL_STORAGE |
|
对于同一组内的权限,只要有一个被同意,其他的都会被同意。
3.Android 7.0的适配
3.1 应用间共享文件
在targetSdkVersion大于等于的24的App中,但是我们没有去适配7.0。那么在调用安装页面,或修改用户头像操作时,就会失败。那么就需要你去适配7.0或是将targetSdkVersion改为24以下(不推荐)。适配的方法这里就不细讲,大家可以看鸿洋大神的 Android 7.0 行为变更 通过FileProvider在应用间共享文件这篇文章
3.2 APK signature scheme v2
Android 7.0 引入一项新的应用签名方案 APK Signature Scheme v2,它能提供更快的应用安装时间和更多针对未授权 APK 文件更改的保护。在默认情况下,Android Studio 2.2 和 Android Plugin for Gradle 2.2 会使用 APK Signature Scheme v2 和传统签名方案来签署您的应用。
1)只勾选v1签名就是传统方案签署,但是在7.0上不会使用V2安全的验证方式。
2)只勾选V2签名7.0以下会显示未安装,7.0上则会使用了V2安全的验证方式。
3)同时勾选V1和V2则所有版本都没问题。
3.3 org.apache不支持问题
build.gradle里面加上这句话
defaultConfig { useLibrary 'org.apache.http.legacy' }
3.4 SharedPreferences闪退
SharedPreferences read = getSharedPreferences(RELEASE_POOL_DATA, MODE_WORLD_READABLE); //MODE_WORLD_READABLE :8.0以后不能使用这个获取,会闪退,修改成MODE_PRIVATE
Android 8.0的适配
4.1 安卓8.0中PHONE权限组新增两个权限
ANSWER_PHONE_CALLS:允许您的应用通过编程方式接听呼入电话。要在您的应用中处理呼入电话,您可以使用 acceptRingingCall() 函数。 READ_PHONE_NUMBERS :权限允许您的应用读取设备中存储的电话号码。
4.2 通知适配
安卓8.0中,为了更好的管制通知的提醒,不想一些不重要的通知打扰用户,新增了通知渠道,用户可以根据渠道来屏蔽一些不想要的通知
4.3 安装APK
首先在AndroidManifest文件中添加安装未知来源应用的权限:
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
4.5 静态广播无法正常接收
问题原因: Android 8.0 引入了新的广播接收器限制,因此您应该移除所有为隐式广播 Intent 注册的广播接收器
解决方案: 使用动态广播代替静态广播
4.6 Caused by: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation
问题原因: Android 8.0 非全屏透明页面不允许设置方向 解决方案:android:windowIsTranslucent设置为false
Android 9.0的适配
9.1 CLEARTEXT communication to life.115.com not permitted by network security policy
问题原因: Android P 限制了明文流量的网络请求,非加密的流量请求都会被系统禁止掉
解决方案:
在资源文件新建xml目录,新建文件
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true" /> </network-security-config>
清单文件配置:
<application android:networkSecurityConfig="@xml/network_security_config"> <!--9.0加的--> <uses-library android:name="org.apache.http.legacy" android:required="false" /> </application>
但还是建议都使用https进行传输