我一直在尝试做类似于 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/