Android P 适配

一. SDK接口限制

1. 原因和目的
  • 为帮助确保应用稳定性和兼容性,此平台对某些非 SDK 函数和字段的使用进行了限制;
  • 无论您是直接访问这些函数和字段,还是通过反射或 JNI 访问,这些限制均适用。
  • 在 Android 9 中,您的应用可以继续访问这些受限的接口;该平台通过,您的应用可以继续访问这些受限的接口;
2. SDK限制类型
  • 白名单:SDK
  • 浅灰名单:仍可以访问的非 SDK 函数/字段。
  • 深灰名单: 对于 Target Api SDK 低于 API 28 的应用,允许使用深灰名单接口。对于 Target Api SDK API 28 或更高级别的应用:行为与黑名单相同。
  • 黑名单:无论 Target Api SDK 如何。 平台将表现为似乎接口并不存在。 例如,无论应用何时尝试使用接口平台都会引发 NoSuchMethodError/NoSuchFieldException。
    ​ 以DexFile(深灰名单)的热修复不能用
3. SDK检测工具

官方提供了自动扫描工具 veridex

4. 详情使用参考资料

Android P 适配指南Sdk接口限制

google官方中文文档对非Sdk接口限制

二.前台服务

1. 权限问题

Target 28+ 并使用前台服务的应用必须求 FOREGROUND_SERVICE 权限。 这是 普通权限,因此,系统会自 动为请求权限的应用授予此权限。

如果针对 Android 9 或更高版本的应用尝试创建一个前台服务且未请求 FOREGROUND_SERVICE,则系统会引发 SecurityException
manifest.xml 中申明

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
  <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
</manifest>
2. 使用原因和目的
  • 前台服务被认为是用户主动意识到的一种服务,因此在内存不足时,系统也不会考虑将其终止。
  • 前台服务必须为状态栏提供通知,放在“正在进行”标题下方,这意味着除非服务停止或从前台移除,否则不能清除通知。
3. 使用方法

要请求让服务运行于前台,请调用 startForeground()。此方法采用两个参数:唯一标识通知的整型数和状态栏的 Notification。
例如:

Notification notification = new Notification(R.drawable.icon, getText(R.string.ticker_text),
    System.currentTimeMillis());
Intent notificationIntent = new Intent(this, ExampleActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.setLatestEventInfo(this, getText(R.string.notification_title),
        getText(R.string.notification_message), pendingIntent);
startForeground(ONGOING_NOTIFICATION_ID, notification);

注意:提供给 startForeground() 的整型 ID 不得为 0。要从前台移除服务,请调用 stopForeground()
此方法采用一个布尔值,指示是否也移除状态栏通知。 此方法不会停止服务。 但是,如果您在服务正在前台运行时将其停止,则通知也会被移除

4. 使用注意点

如果针对Android8.0的应用尝试在不允许创建其后台服务的情况下使用startService()函数,则该函数将引发一个llegalStateException.Context.startForegroundService()函数将启动一个前台服务。即使应用在后台运行,系统也允许其调用Context.startForegroundService().不过,应用必须在创建服务后的5秒内调用改服务的startForegroun()函数,否则将报ANR(Application Not Responding)错误。
从Android8.0开始,需要为发送的每种不同类型的通知创建一个渠道,如果在Android8.0及以上在未指定通知频道的情况下发送通知,通知不会显示,会记录错误。
创建通知渠道步骤:
1. 通

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值