Android P应用适配相关指南

版权声明:博主原创欢迎分享学习 https://blog.csdn.net/qXing123456789/article/details/83027896

Android P应用适配相关指南

本文对开发Android P应用适配以及新版本相关特性,下图是博主开发的教育项目对刘海屏相关适配.

如图:

在这里插入图片描述

一 Android P适配指导

AndroidP开始提供规范化的接口,应用可以使用标准接口,获取当前是否有刘海,控制应用在刘海屏上的布局显示区域。AndroidP的设备支持模拟刘海效果,持有P的设备的可以打开“开发者选项”,找到“模拟巨有凹口的显示屏”进行模拟调试。

二 刘海屏适配指导

怎么判断支持刘海屏?

谷歌API: DisplayCutout cutout = mContext.getDisplayCutout();
返回DisplayCutout对象,为刘海的描述信息,不支持则返回空

怎么获取刘海信息?

DisplayCutout.getSafeInsets() 返回安全区域Rect
DisplayCutout.getBounds() 返回刘海的区域的Region

如何控制应用的布局显示?

1,LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
2,LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
3,LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER

属性说明:
1,没有设置的情况下默认此标记,只有状态栏区域可见的情况下,才意味着加了FLAG_FULLSCREEN or SYSTEM_UI_FLAG_FULLSCREEN标记的应用窗口都会被切边放在刘海以下
2,此flag下不进行应用窗口的限制,窗口可以显示到刘海区域
3,此flag下应用窗口一直被限制在刘海区域以下

应用也可以通过theme来达到同样的效果

<item name="android:windowLayoutInDisplayCutoutMode">default</item>

对应LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT

<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>

对应LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES

 <item name="android:windowLayoutInDisplayCutoutMode">never</item>

对应LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER

应用遇到窗口显示被限制在刘海以下区域的可以调整layoutInDisplayCutoutMode 设置为LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES,再通过获取DisplayCutout 关于刘海区域信息,调整UI达到更好的满屏体验。

三 Crypto JCA 提供程序已被移除,弃用 Bouncy Castle 加密

Crypto JCA 提供程序已被移除。调用 SecureRandom.getInstance(“SHA1PRNG”,“Crypto”) 将会引发 NoSuchProviderException,调用Bouncy Castle 提供程序的 getInstance(),会生成 NoSuchAlgorithmException 错误。

A:影响范围:
(1)Crypto JCA 提供程序已被移除,此影响所有运行AndriodP系统的所有应用;
(2)Bouncy Castle 提供程序异常的问题,影响所有targetsdkversion>=28的应用;

B: 如何适配
模块应该在getInstance()的时候不指派提供程序,采用默认实现即可

四 FLAG_ACTIVITY_NEW_TASK被强制要求

AndroidP上,从非 Activity 环境中启动 Activity,除非传递 Intent 标志 FLAG_ACTIVITY_NEW_TASK。 如果尝试在不传递此标志的情况下启动 Activity,则该 Activity 不会启动,此限制对所有运行AndroidP的应用生效。

五 禁止空闲应用访问相机、麦克风和传感器

Android 9 限制后台应用访问用户输入和传感器数据的能力。 如果您的应用在运行 Android 9 设备的后台运行,系统将对您的应用采取以下限制:

(1)应用不能访问麦克风或摄像头。

(2)使用连续报告模式的传感器(例如加速度计和陀螺仪)不会接收事件。

(3)使用变化或一次性报告模式的传感器不会接收事件。

六 前台服务的应用必须请求 FOREGROUND_SERVICE 权限

targetsdkversion>=28的应用在使用前台服务的都需要进行必须请求 FOREGROUND_SERVICE 权限。 这是普通权限,因此,系统会自动为请求权限的应用授予此权限。

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

七 默认情况下启用网络传输层安全协议

AndroidP上,对应targetsdkversion>=28的应用需要为特定域名启用明文,必须在应用的网络安全性配置中针对这些域名将 cleartextTrafficPermitted 显式设置为 true,默认情况下明文传输会直接抛出“java.io.IOException: Cleartext HTTP traffic to xxx.com not permitted”异常。

八 不允许共享 WebView 数据目录

targetsdkversion>=28的应用不允许在不同进程之间共享一个 WebView 数据目录。如果应用有多个进程使用 WebView、CookieManager 或 android.webkit 软件包中的任何其他 API,则在第二个进程调用 WebView 函数时,应用将会崩溃。

九 应用禁止访问xt_qtagui目录的文件

AndroidP后,不再允许应用直接读取 /proc/net/xt_qtaguid 文件夹中的文件。 这样做是为了确保与某些根本不提供这些文件的设备保持一致。应用应该采用标准 API TrafficStats 和 NetworkStatsManager 进行访问,此限制对所有运行AndroidP系统上的应用生效。

十 SELinux 禁止访问应用的数据目录

对于targetsdkversion>=28的应用,系统强制每个应用的 SELinux 沙盒对每个应用的私有数据目录强制执行逐个应用的 SELinux 限制。现在,不允许直接通过路径访问其他应用的数据目录。应用可以继续使用进程间通信 (IPC) 机制(包括通过传递 FD)共享数据,例如可以采用FileProvider。

尾言

为自己技术增值,量变引起质变.对象亦来源于生活,模式亦来源于验证的OO经验,那么请学会使用轮子,再到感受制造轮子的乐趣,你会发现原来编程那么美妙.如有错误或不当之处,请读者留言,博主好吸取经验,互相交流学习

参考链接

(1)AndroidP所有应用行为变更:https://developer.android.com/about/versions/pie/android-9.0-changes-all

(2)AndroidP targetSDK 28应用行为变更:https://developer.android.com/about/versions/pie/android-9.0-changes-28

(3)AndroidP 电源管理:https://developer.android.com/about/versions/pie/power

(4)pixles系列镜像升级:https://developers.google.com/android/images

猜你喜欢

转载自blog.csdn.net/qXing123456789/article/details/83027896