Приемник вещания работает только при открытом приложении - PullRequest
0 голосов
/ 12 декабря 2018

Привет! Я создал приложение для автоматической отправки смс, которое автоматически отправляет SMS при получении уведомления от firebase.Я могу отправить SMS с расширением FirebaseMessagingService.Теперь, чтобы получить отправленный статус, я создал приемник трансляций внутри своей основной деятельности.Здесь я могу получить статус отправки 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);
                }
            }
    }

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Если вы отменили регистрацию получателя в onPause (), он может не работать.Попробуйте переместить незарегистрированный код в onStop () или onDestroy ()

0 голосов
/ 12 декабря 2018

Вы зарегистрировались в классе манифеста.?если нет, то зарегистрируйте свою трансляцию в манифесте и используйте отдельный класс для трансляции, вы можете прочитать больше здесь.https://www.c -sharpcorner.com / UploadFile / 8836be / как к созданию глобального-вещания-приемник-и-тест-сервис-в /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...