Отправка сообщения от BroadcastReceiver в Сервис - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть служба, которая отправляет смс сообщения (через AsyncTask).Мне нужно захватить статус отправки / получения с помощью BraodcaseReceiver.По какой-то причине я не могу получить правильный код результата от получателя.Если я реализую onReceive в моем Сервисе, resultCode всегда будет нулевым.

Не уверен, что я делаю неправильно, поэтому возникает вопрос, как правильно отправить сообщение из класса Broadcase Receiver обратно в фоновую службу?

Фон:

Приложение состоит из одного действия, которое не выполняет ничего, кроме запуска фоновой службы.В этом сервисе я отправляю смс-сообщения.

Я не очень хорош в шаблонах проектирования Android, но из того, что я видел в интернете, чтобы получить результат статуса смс, мне нужно создать отдельный класскак BraodcaseReceiver.Вот почему я создал один.Этот BroadcastReceiver должен получить статус отправленного сообщения, и я хочу иметь возможность передавать это значение службе (позже из службы в деятельность)

Итак, что я делаю: Aactivty-> Сервис-> SendSMS, затем при завершении задачи я хотел бы получить статус отправленной смс.

Примечание: Я только что понял, что не использовалAsyncTask для отправки смс.Я хочу использовать службу только в качестве менеджера AsyncTasks, которые отправляют смс-сообщения, и я не хочу, чтобы они отправляли сообщения, чтобы заблокировать службу.Это хороший дизайн?

Сервис:

protected boolean sendSMS(String number) {

    String SENT = "SMS_SENT";
    String DELIVERED = "SMS_DELIVERED";
    PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(SENT), 0);
    PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, new Intent(DELIVERED), 0);

    registerReceiver(sendBroadcastReceiver, new IntentFilter(SENT));
    registerReceiver(deliveryBroadcastReceiver, new IntentFilter(DELIVERED));

    String destinationAddress = number;
    String smsMessage  = String.format("This is test");
    String scAddress = null;
    SmsManager smsManager = SmsManager.getDefault();
    smsManager.sendTextMessage(destinationAddress, scAddress, smsMessage, sentPI, deliveredPI);
    return true;
}

BroadcastReceiver sendBroadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        Integer resultCode =  intent.getExtras().getInt("msg");
        //resultCode is always null here
        Log.d("Debug", "sendBroadcastReceiver code: "+ resultCode);  
    }
};

BroadcastReceveier:

public class SentReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent arg1) {
        Integer resultcode = getResultCode();
        //**for some reason when I define onReceive in Service class**
        //**I don't get any debug message as if this code doesn't execute**
        Log.d("Debug", "Code: "+ resultcode);

        Intent intent = new Intent("SMS_SENT");
        intent.putExtra("msg", resultcode);
        context.sendBroadcast(intent);
    }
}
...