权限适配
动态权限的配置是Android6.0最先开始的,也是Android系统对开发者影响最深最大的改动之一;
权限适配三连问
问:是否Android6.0所有权限都需要动态申请
答:不是,只有危险权限才需要申请;
问:危险权限有哪些?
答:见下面危险权限说明;
问:危险权限是否需要一个一个申请?
答:在Android6.0~8.0不需要,如果应用在运行时请求权限并且被授予该权限,系统会错误地将属于同一权限组并且在清单中注册的其他权限也一起授予应用,及对于同一组内的权限,只要一个同意,其他的也会同意。但是在Android8.0之后,此行为被纠正,系统只会授予应用明确请求的权限。然而一旦被用户授予这个权限,则后续对该权限组中权限的请求都将自动批准,但是若没有请求响应的权限而进行操作的话就会出现crash的情况;
危险权限分组说明
|权限组| 权限说明 |
|-CALENDAR-|-android.permission.READ_CALENDAR-|
| | android.permission.WRITE_CALENDAR |
| CAMERA | android.permission.CAMERA |
|-CONTACTS-|-android.permission.READ_CONTACTS-|
| | android.permission.WRITE_CONTACTS |
|LOCATION|android.permission.ACCESS_FINE_LOCATION |
|–|-android.permission.ACCESS_COARSE_LOCATION-|
| MICROPHONE | android.permission.RECORD_AUDIO |
等
Android7.0适配
应用间共享文件在targetSdkVersion大于等于24的应用中,但是我们没有去适配Android7.0。那么在调用安转页面,或修改用户头像时,就会失败,那么需要你去适配Android7.0;
Android8.0适配
Android 8.0中phone新增两个权限
ANSWER_PHONE_CALLS:允许你的应用通过编程的方式接入呼入电话。要在你的应用中处理呼入电话,你要使用acceptRingingCall()函数。
READ_PHONE_NUMBERS:权限允许你的应用读取设备中的电话号码;
通知适配
Android8.0中,为了更好地管制通知的提醒,不想一些不重要的通知打扰用户,新增了通知渠道,用户可以根据通知渠道来屏蔽一些不显要的通知。
Android9.0适配
CLEARTEXT communication to life.115.com not permitted by network security policy;
问题原因:AndroidP 限制了明文流量的网络请求,非加密的网络请求都会被系统禁止掉;
解决方案:
1.在资源文件新建xml目录,新建network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
2.清单文件配置:
<application
android:networkSecurityConfig="@xml/network_security_config">
<!--Android 9.0加的-->
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
</application>
其他API的修改
java.lang.IllegalArgumentException: Invalid Region.Op - only INTERSECT and DIFFERENCE are allowed
if (Build.VERSION.SDK_INT >= 26)
canvas.clipPath(mPath);
else
canvas.clipPath(mPath, Region.Op.REPLACE);