我一直在尝试做一些类似truecaller的应用程序,我的应用程序应该在电话挂断后显示屏幕。是通过在android.intent.action.PHONE_STATE
文件中注册manifest
隐式广播来实现的。
但是,如果我因为Android O广播限制而将应用程序更改为针对Android的应用程序,这是行不通的,而且我正在试图为这个用例找到一个替代解决方案。
在android中建议的替代解决方案:Job scheduler
或向context
注册service
。
作业调度程序:,由于Job scheduler
优化,将有一些延迟来接收回调。因此,如果我们的应用程序屏幕在通话后几分钟显示,每隔几秒钟检查一次新的通话记录,就会影响用户体验,从而导致电池耗尽问题。
注册服务,并在中使用上下文:我希望该行为能够正常工作,即使应用程序没有活动或处于活动状态。如果系统杀死Service
,这将无法工作。
注册前台服务:这要求随时向用户显示一个通知,这将是对用户的垃圾邮件,而运行服务24/7将消耗大量资源,这违背了广播限制的全部目的。
请提出另一种解决方案,使用户体验保持不变。
提前感谢
发布于 2017-08-28 01:14:06
由于没有正确的解决方案从Android读取PHONE_STATE,我们可以选择的最佳选择是在内容提供者的新调用日志条目上触发一个作业。这样,保持了在调用结束后显示屏幕(有几秒钟的延迟)的行为。
注意:缺点是我们不能得到电话的状态(铃声或off_the_hook等)。只有在将新的呼叫日志添加到系统DB之后才会收到回叫。
发布于 2018-06-14 11:31:30
最后,该操作被添加到“隐式广播异常”列表中,这样您就可以将ACTION_PHONE_STATE_CHANGED
添加到您的清单中,并且它将工作:
https://developer.android.com/guide/components/broadcast-exceptions
TelephonyIntents.ACTION_*_SUBSCRIPTION_CHANGED,"TelephonyIntents.SECRET_CODE_ACTION",ACTION_PHONE_STATE_CHANGED,ACTION_PHONE_ACCOUNT_REGISTERED,ACTION_PHONE_ACCOUNT_UNREGISTERED OEM电话应用程序可能需要接收这些广播。
发布于 2017-08-17 21:52:36
您只有一个解决方案,使用前台服务并在服务中注册广播接收器。
https://stackoverflow.com/questions/45716904
复制相似问题