![](/img/trans.png)
[英]Is a BroadcastReceiver's onReceive method always called the moment it gets registered dynamically?
[英]onReceive() is not always called
由于某些原因,我的BroadcastReceiver
类的onReceive()
方法并不总是被调用。 它通常被称为,但有时不是。
更具体地说,我正在接收android.intent.action.PHONE_STATE
。 在大多数情况下,当有电话打进来时,将调用onRecieve()
方法,以更改RINGING,IDLE和OFFHOOK。 但是,在某些情况下,该方法不是为RINGING调用的(来电时),而是为IDLE调用的(我挂断电话时)。
从清单中:
<receiver android:name=".CallReceiver">
<intent-filter android:priority="999">
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
onReceive方法本身非常简单:
public void onReceive(Context voCtx, Intent voIntent)
{
Log(voCtx, "onReceive: " + voIntent.getAction());
if(voIntent.getAction().equals(TelephonyManager.ACTION_PHONE_STATE_CHANGED))
{
HandleCallStateChanged(voCtx, voIntent);
}
}
日志仅输出到我的日志文件中,因此我可以看到发生了什么。 我不确定为什么有时只调用onReceive()
。 在我的应用获取广播之前,其他某个应用可以拦截广播并取消广播吗?
Android现在具有“打ze”和“ App待机”功能。 因此,如果您的应用进入此模式,那么您的BroadcastReceiver
将不会触发。
为了让您的接收者被触发,您可以使用REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
权限。 这样,您的应用将被排除在电池优化过程之外。
注意:如果您不小心使用此权限,Google可能会禁止您的应用程序
看来这是特定于Samsung手机的。 在电池设置下,有一个“应用程序电源监视器”(除了正常的电池优化功能外)。 此应用程序电源监视器可以使应用程序进入“睡眠”状态(与“应用程序待机”不同)。 将我的应用设置为“不受监视的应用”似乎已经解决了我的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.