Android O:PHONE_STATE广播限制

Pra*_*r C 34 performance android android-broadcast android-broadcastreceiver android-8.0-oreo

我一直在尝试做类似于truecaller应用程序的东西,我的应用程序应该在呼叫挂断后显示一个屏幕.通过android.intent.action.PHONE_STATEmanifest文件中注册隐式广播来实现这一点.

但是,如果我将应用程序更改为目标Android O,则无法正常工作,因为Android O广播限制,我正在尝试找出此用例的替代解决方案.

替代方案建议在Android的文档:Job scheduler或注册一个servicecontext.

作业调度程序:由于Job scheduler优化,接收回调会有一些延迟.因此,如果我们的应用程序屏幕在电话呼叫后几分钟显示,并且每隔几秒检查一次新的呼叫记录就会导致电池耗尽问题,这将影响用户体验.

在Java中使用上下文注册服务:即使应用程序未处于活动状态或活动状态,我也希望该行为能够正常工作.如果系统杀死了,这将无效Service.

注册前台服务:这需要一直向用户显示通知,这将是用户的垃圾邮件,并且全天候运行服务会消耗大量资源,这会破坏广播限制的整个目的.

请建议一个替代解决方案,以便用户体验保持不变.

提前致谢

Pra*_*r C 2

由于没有适当的解决方案可以从 Android O 读取 PHONE_STATE。我们可以寻求的最佳替代方案是在来自内容提供商的新呼叫日志条目上触发作业。这样,通话结束后显示屏幕(有几秒的延迟)的行为得以维持。

注意:缺点是我们无法获取电话呼叫的状态(振铃或摘机等)。只有在新的呼叫日志添加到系统 DB 后才会收到回叫。