Yousif
Yousif

Reputation: 569

Passing data to Broadcast Receiver for SMS delivery report

from activity i used putExtra(String,String) to pass data to broadcast receiver, but the problem was that the name and the phone number was not changing when sending second SMS to different name and number after few seconds from the first SMS.

when i wait long time and send SMS, the name and number was changed to the correct name and number. why?

How to fix this problem?

                 SmsManager SM1=SmsManager.getDefault();
                 ArrayList<String> parts = SM1.divideMessage("Hello");
                 ArrayList<PendingIntent> sentIntents = new ArrayList<PendingIntent>();
                 ArrayList<PendingIntent> deliveryIntents = new ArrayList<PendingIntent>();

                 size=parts.size();
                 for (int i=1;i<=size;i++) {

                  Intent in=new Intent("package.DeliveryReport.SMS_DELIVERED");
                 in.putExtra("package.DeliveryReport.name", name);
                 in.putExtra("package.DeliveryReport.phoneNumber", phoneNumber);
                 deliveryIntents.add(PendingIntent.getBroadcast(this, 0,
                         in, 0));

                 }

                SM1.sendMultipartTextMessage(phoneNumber,null,parts,sentIntents,deliveryIntents);

The Broadcast receiver

public class DeliveryReport extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {


    if(intent.getAction().equals("package.DeliveryReport.SMS_DELIVERED"))
    {
        Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
          switch (getResultCode())
          {
            case Activity.RESULT_OK:
                vibrator.vibrate(500);
                Toast.makeText(context, "SMS DELIVERED to "+intent.getStringExtra("package.DeliveryReport.name")+
                        " phone "+intent.getStringExtra("package.DeliveryReport.phoneNumber"),Toast.LENGTH_SHORT).show();

              break;
            case Activity.RESULT_CANCELED:
                vibrator.vibrate(500);
                Toast.makeText(context, "SMS did not DELIVERED to "+intent.getStringExtra("package.DeliveryReport.name")+
                        " phone "+intent.getStringExtra("package.DeliveryReport.phoneNumber"),Toast.LENGTH_SHORT).show();
              break;
            }
          }


}

Upvotes: 2

Views: 818

Answers (1)

Yousif
Yousif

Reputation: 569

All i needed was to add PendingIntent.FLAG_ONE_SHOT

Intent in=new Intent("package.DeliveryReport.SMS_DELIVERED");
             in.putExtra("package.DeliveryReport.name", name);
             in.putExtra("package.DeliveryReport.phoneNumber", phoneNumber);
             deliveryIntents.add(PendingIntent.getBroadcast(this, 0,
                     in, PendingIntent.FLAG_ONE_SHOT));

Upvotes: 2

Related Questions