簡體   English   中英

onReceive()並不總是被調用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM