簡體   English   中英

應用程序被殺死時廣播接收器不工作

[英]Broadcast receiver is not working when application is killed

當用戶收到任何 SMS 時,我需要執行一些邏輯。 當應用程序運行時,我的廣播接收器工作正常,但如果我殺了我,那么它就不能按預期工作。

有人可以幫我弄這個嗎? 我已經嘗試了互聯網上所有可能的方法,但仍然沒有任何效果。

非常感謝你。

我的廣播接收器 class:

public class EveryDay_SMSListener extends BroadcastReceiver {

    private SharedPreferences preferences;
    String msgBody ="";
    String msg_from;
    EveryDay_DataBase mydb;
    @Override
    public void onReceive(Context context, Intent intent) {

        Intent background = new Intent(context, EveryDay_Service.class);
        context.startService(background);
        if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){
            Bundle bundle = intent.getExtras();           
            SmsMessage[] msgs = null;
enter code here
            if (bundle != null){

                try{
                    Object[] pdus = (Object[]) bundle.get("pdus");
                    msgs = new SmsMessage[pdus.length];
                    for(int i=0; i<msgs.length; i++){
                        msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
                        msgBody = msgBody+(msgs[i].getMessageBody()).toString();
                        msg_from = msgs[i].getOriginatingAddress();
                    }

                }catch(Exception e){
                }
            }
        }
    }

}

在最新版本的 Android 中,當應用程序死機並發出廣播(對於大多數廣播標志)時,系統不會啟動應用程序。

使這項工作的一種方法,您應該使用前台服務,一些可以幫助您實現它的鏈接:

  1. https://androidwave.com/foreground-service-android-example/
  2. https://medium.com/@ramkumarv3/foreground-service-with-notification-channel-ac6697c8a6d1
  3. https://developer.android.com/guide/components/services

請注意,一些制造商甚至關閉了這些服務以進行電池優化,例如華為、三星……。 因此,您應該添加品牌特定代碼,以使用戶禁止電池優化和自動關閉您的應用程序的服務。

您說在清單中注冊接收器對您不起作用,因此剩下的唯一選擇是:

  1. 創建一個前台服務並在它的onCreate中注冊 SMS 接收器(不要在 manifest 中注冊 SMS 接收器)。
  2. 創建一個每 (n) 秒啟動一次服務的jobscheduler程序

這是最后一個解決方案,但如果您在應用程序終止和下一個作業調度程序工作之間不走運,您可能會丟失短信,因此您可能希望 (n) 足夠小。

更好的解決方案是擁有讀取短信權限,並且每次您的活動開始時從 android 收件箱中讀取所有短信,看看您是否丟失了任何短信。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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