簡體   English   中英

廣播接收器僅在打開應用程序時有效

[英]Broadcast receiver only works when app is opened

嗨,我創建了一個自動短信應用程序,當收到firebase通知時,該應用程序會自動發送短信。 我可以發送擴展FirebaseMessagingService SMS。 現在,要獲取發送狀態,我在主要活動中創建了一個廣播接收器。 在這里,我僅在打開App時才能獲得SMS發送狀態。 即使應用程序是背景,我也需要得到它。

我的收件人是:

private BroadcastReceiver receiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            String message = null;
            switch (getResultCode()) {
                case Activity.RESULT_OK:
                    message = "Message sent!";
                    Log.e("DATA", message);
                    unregisterReceiver(receiver);
                    break;
                case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                    message = "Error. Message not sent.";
                    Log.e("DATA", message);
                    unregisterReceiver(receiver);
                    break;
                case SmsManager.RESULT_ERROR_NO_SERVICE:
                    message = "Error: No service.";
                    Log.e("DATA", message);
                    unregisterReceiver(receiver);
                    break;
                case SmsManager.RESULT_ERROR_NULL_PDU:
                    message = "Error: Null PDU.";
                    Log.e("DATA", message);
                    unregisterReceiver(receiver);
                    break;
                case SmsManager.RESULT_ERROR_RADIO_OFF:
                    message = "Error: Radio off.";
                    Log.e("DATA", message);
                    unregisterReceiver(receiver);
                    break;
            }
        }
    };

在onCreate中注冊接收者:

registerReceiver(receiver, new IntentFilter(Constants.SMS_SENT));

我的Firebase服務使用以下方式發送短信:

private void sendSms(String phonenumber[],String message)
    {
        SmsManager manager = SmsManager.getDefault();
        PendingIntent piSend = PendingIntent.getBroadcast(this, 0, new Intent(Constants.SMS_SENT), 0);
        PendingIntent piDelivered = PendingIntent.getBroadcast(this, 0, new Intent(Constants.SMS_DELIVERED), 0);
            int length = message.length();
            if(length > MAX_SMS_MESSAGE_LENGTH)
            {
                ArrayList<String> messagelist = manager.divideMessage(message);
                for(String number : phonenumber) {
                    manager.sendMultipartTextMessage(number, null, messagelist, null, null);
                }
            }
            else
            {
                for(String number : phonenumber) {
                    manager.sendTextMessage(number, null, message, piSend, piDelivered);
                }
            }
    }

您在清單類中注冊了嗎? 如果沒有,請在清單中注冊您的廣播,並使用單獨的類進行廣播,您可以從此處了解更多信息。 https://www.c-sharpcorner.com/UploadFile/8836be/how-to-create-global-broadcast-receiver-and-test-service-in/

如果要在onPause()中注銷接收器,則可能無法正常工作。 嘗試將注銷代碼移動到onStop()或onDestroy()

暫無
暫無

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

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