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

问题描述 投票:0回答:1

我正在尝试在循环中发送大量sms消息,并且对于每个消息,我需要注册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作为额外发送到sentIntent并在onReceive中接收它(类似于Girish的答案),但我实际上只重复接收了一个值。
android broadcastreceiver smsmanager
1个回答
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);
}
© www.soinside.com 2019 - 2024. All rights reserved.