适配Android 9.0相关问题总结

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"

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容