安卓 O : PHONE_STATE broadcast limitation

标签 android performance android-broadcast android-broadcastreceiver android-8.0-oreo

我一直在尝试做类似于 truecaller 应用程序的事情,我的应用程序应该在通话挂断后显示一个屏幕。通过在 manifest 文件中注册 android.intent.action.PHONE_STATE 隐式广播来实现此目的。

但是,如果我将应用程序更改为针对 Android O,它将无法正常工作,因为 Android O broadcast limitation ,我正在尝试找出这个用例的替代解决方案。

android 文档中建议的替代解决方案:Job scheduler 或使用 context 注册 service

Job scheduler:由于 Job scheduler 优化,接收回调会有一些延迟。因此,如果我们的应用程序屏幕在通话后几分钟显示并且每隔几秒轮询检查新的通话记录会导调用池消耗问题,这将影响用户体验。

在 Java 中使用上下文注册服务:我希望即使应用程序不活动或不活动,该行为也能正常工作。如果系统终止 Service,这将不起作用。

注册前台服务:这需要一直向用户显示通知,这对用户来说是垃圾邮件,并且 24/7 全天候运行服务会消耗大量资源,这会破坏广播限制的全部目的。

请提出替代解决方案,以便用户体验保持不变。

提前致谢

最佳答案

最终,该操作已添加到“隐式广播异常”列表中,因此您可以将 ACTION_PHONE_STATE_CHANGED 添加到您的 list 中,它会起作用:

https://developer.android.com/guide/components/broadcast-exceptions

ACTION_CARRIER_CONFIG_CHANGED, TelephonyIntents.ACTION_*_SUBSCRIPTION_CHANGED, "TelephonyIntents.SECRET_CODE_ACTION", ACTION_PHONE_STATE_CHANGED, ACTION_PHONE_ACCOUNT_REGISTERED, ACTION_PHONE_ACCOUNT_UNREGISTERED

OEM telephony apps may need to receive these broadcasts.

关于安卓 O : PHONE_STATE broadcast limitation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45716904/

相关文章:

android - 如何在android中更改自定义形状的边界颜色?

c# - 提高 REST 服务的性能

c# - 使用任何(指定的)对象集合在不反射的情况下填充 IDataReader

Android,广播可打包数据

java - 即使应用程序被杀死,我怎样才能让我的应用程序运行?当它从最近的应用程序中删除时,就被杀死了

android - 使用未经完整性检查的未签名条目安装 apk

android - 我正在尝试添加 recyclerview 依赖项,但它不起作用

android - 为工作区中的每个项目创建 ant build.xml 文件

jquery - 我应该在什么级别缓存 jQuery DOM 查询的结果?

android - 设备重启后,我的应用接收 BOOT_COMPLETED 广播比其他应用慢/晚?