Отправьте параметр в BroadcastReceiver и отметьте его в методе onReceive. - PullRequest
0 голосов
/ 21 апреля 2019

Я пытаюсь отправить большую часть смс-сообщений в цикле, и для каждого сообщения мне нужно зарегистрировать braodcaseReceiver, чтобы определить статус отправленного или полученного.

Мне нужно отправить значение сообщенияid для broadcastReceiver, чтобы иметь возможность пометить это сообщение как отправленное.

Как передать значение «id» внутрь BroadcastReceiver?

Код выглядит следующим образом:

...
// message id will be different for each time a message is sent
String id = "101"; 

String SENT = "SMS_SENT";
String DELIVERED = "SMS_DELIVERED";

Intent sentIntent = new Intent(SENT);
Intent deliveredIntent = new Intent(DELIVERED);

PendingIntent sentPI = PendingIntent.getBroadcast(mContext, 0, sentIntent, 0);
PendingIntent deliveredPI = PendingIntent.getBroadcast(mContext, 0, deliveredIntent, 0);

mContext.registerReceiver(
    new BroadcastReceiver()
    {
        @Override public void onReceive(Context arg0, Intent intent)
        {
            //I need to check the id of the message here 
            switch(getResultCode())
            {
                case Activity.RESULT_OK:
                    //updateSmsSentStatus(id);
                    break;
                ...
             }
             unregisterReceiver(this);
         }
    }, new IntentFilter(SENT));

SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(destinationAddress, scAddress, smsMessage, sentPI, deliveredPI);

Примечание:

Чтобы добавить больше контекста к проблеме:

  • Код выше находится внутри класса AsyncTask.Эта задача вызывается несколько раз для асинхронной отправки нескольких сообщений.

  • Я попытался отправить идентификатор сообщения как дополнительный в sentIntent и получить его внутри onReceive (аналогично ответу Гириша), но на самом деле яполучил только одно значение повторно.

1 Ответ

0 голосов
/ 22 апреля 2019

При создании объекта Intent вы можете сохранить Id в Intent следующим образом:

Intent sentIntent = new Intent(SENT);
// assuming id is of type int
intent.putExtra("Id", id);

, затем в методе onReceive,

public void onReceive(Context arg0, Intent intent)
{
  int id = intent.getIntExtra("Id", -1); 
  // above -1 default value is returned if "Id" doesn't exist.

  //I need to check the id of the message here 
  switch(getResultCode())
    {
      case Activity.RESULT_OK:
        //updateSmsSentStatus(id);
        break;
        ...
     }
     unregisterReceiver(this);
}
...