![](/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.