1.相机拍照崩溃(Android7.0引入“私有目录被限制访问”,“StrictModeAPI政策”)
解决方法 :首先在manifast中创建一个provider
然后在打开相机的地方根据设备版本处理:
2.MODE_WORLD_READABLE模式废弃(SharedPreferences模式)
解决方法:使用MODE_PRIVATE模式。
3.获取以content开头的文件拿不到正确路径。
目前并没有出现此问题。
4.Api8.0以上版本升级无法跳转安装页面
解决方法:首先在manifast中增加一个权限
在安装apk的地方把 Intent intent = newIntent(Intent.ACTION_VIEW)
改为:Intent intent = newIntent(Intent.ACTION_INSTALL_PACKAGE);
5.解析包安装失败
解决方法:安装时把
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)这句话放在
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)下面
6.通知栏不显示
解决方法:
7.隐式广播限制
安卓8.0对广播进行了限制 接收广播消耗资源 如果多个应用注册了系统广播 会持续消耗资源。
解决方案
如果是注册系统广播 不要在清单文件中注册了 要根据自己的需要在代码中注册 比如少儿项目 清单文件中注册了个像 监听网络变化 和 投屏监听网络的广播 这些都可以在项目开启时动态注册
如果是自定义广播 尽量也要动态注册 如果实在需要静态注册 可以尝试在发送的时候携带 intent.addFlags(0x01000000);
8.低电耗模式和应用待机模式限制
8.0系统待机一段时间后会进入低电量模式 低电量模式下闹钟类AlarmManager功能会受到影响 如果用到了这个类 解决方案如下
设置闹钟时使用setInexactRepeating这个方法也是设置重复闹钟 他会把几个时间差不多的闹钟合并成一个执行 相对来说更省电 如果还是不行的话就要申请电池白名单
PowerManager powerManager = (PowerManager) activity.getSystemService(Context.POWER_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
//判断应用是否在去除低电耗的白名单中
if (!powerManager.isIgnoringBatteryOptimizations(activity.getPackageName())) {
//申请白名单 启动一个ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS 意图intent
Intent intent = new Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
activity.startActivity(intent);
}
}
9.关闭分屏功能
在清单文件的 <activity>或 <application>节点中设置该属性,启用或禁用多窗口显示
android:resizeableActivity="false" //关闭分屏功能
android:resizeableActivity="true" //开启分屏功能
10.权限的动态申请(具体文档请参照文案文档)
使用easyPermission动态申请权限。
需要申请的权限:
相机权限,读、写内存权限和获取手机信息权限。
拍摄照片和录制视频的权限,
权限名字位置拒绝后的影响
相机权限扫一扫不能使用扫一扫功能
相机权限和读写手机内存权限更换头像不能更换头像
获取手机信息请求头、公共参数、搜索列表参数、关于页面的排查日志无影响
读写手机内存权限下载视频不能下载
读写手机内存权限下载图片不能下载
定位权限投屏无影响
相机权限和读写手机内存权限H5上传图片或视频不能上传
11.Api9.0以上org.apache.http.legacy 库被移除
从Android P开始,org.apache.http.legacy库将从 bootclasspath 中删除
若要继续使用在清单文件application节点里添加如下代码:
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
12.Api9.0以上禁止 App 使用所有未加密的连接
在Android P系统的设备上,如果应用使用的是非加密的明文流量的http网络请求,则会导致该应用无法进行网络请求,https则不会受影响,同样地,如果应用嵌套了webview,webview也只能使用https请求。
解决方法:
在res文件夹下创建一个xml文件夹,然后创建一个network_security_config.xml文件,文件内容如下
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
<network-security-config>
接着,在AndroidManifest.xml文件下的application标签增加以下属性:
android:networkSecurityConfig="@xml/network_security_config"