将参数发送到BroadcastReceiver并在onReceive方法中检查它

时间:2019-04-20 22:24:25

标签: android broadcastreceiver smsmanager

我试图循环发送大量短信,对于每条消息,我需要注册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类内部。多次调用该任务以异步发送多个消息。

  • 我尝试将消息ID作为额外的消息发送到sendIntent,并在onReceive内接收它(类似于Girish的回答),但实际上我只重复接收到一个值。

1 个答案:

答案 0 :(得分:0)

在创建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);
}