I solved the problem partially. I remove unregister (broadcast) from the end of the sms method and put it in the onreceive () method. So unregister () will happen after reaching onreceive () only.My working code is inserted below.
public void sendsms(){ sendBroadcastReceiver=new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub switch (getResultCode()) { case Activity.RESULT_OK: System.out.println("hereeeeeeeeeeeeeeeeeeeeeeeeeeeeee8888888888888888"); System.out.println("1111111111111111111111111111111111"); Toast.makeText(getBaseContext(), "SMS sent", Toast.LENGTH_SHORT).show(); ContentValues values = new ContentValues(); values.put("address", phoneNumber); values.put("body", message); getContentResolver().insert(Uri.parse("content://sms/sent"), values); afterSend(); break; case SmsManager.RESULT_ERROR_GENERIC_FAILURE: Toast.makeText(getBaseContext(), "Generic failure", Toast.LENGTH_SHORT).show(); System.out.println("222222222222222222222222222"); break; case SmsManager.RESULT_ERROR_NO_SERVICE: Toast.makeText(getBaseContext(), "No service", Toast.LENGTH_SHORT).show(); System.out.println("333333333333333333333333333333333"); ContentValues values1 = new ContentValues(); values1.put("address", phoneNumber); values1.put("body", message); getContentResolver().insert(Uri.parse("content://sms/queued"), values1); afterSend(); break; case SmsManager.RESULT_ERROR_NULL_PDU: System.out.println("44444444444444444444444444"); Toast.makeText(getBaseContext(), "Null PDU", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_RADIO_OFF: System.out.println("4444444444444444444444444444444444"); Toast.makeText(getBaseContext(), "Radio off", Toast.LENGTH_SHORT).show(); break; default: break; } context.unregister(this); } }; registerReceiver(sendBroadcastReceiver , new IntentFilter(SENT)); //--- when the SMS hasbeen delivered--- deliveryBroadcastReciever=new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub switch (getResultCode()) { case Activity.RESULT_OK: System.out.println("okkkkkkkkkkkkkkkkkkkkkkkkkkk"); Toast.makeText(getBaseContext(), "SMS delivered", Toast.LENGTH_SHORT).show(); break; case Activity.RESULT_CANCELED: System.out.println("cancellllllllllllllllllll"); Toast.makeText(getBaseContext(), "SMS not delivered", Toast.LENGTH_SHORT).show(); break; } context.unregister(this) } }; registerReceiver(deliveryBroadcastReciever, new IntentFilter(DELIVERED)); SmsManager sms = SmsManager.getDefault(); sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI); }
Now my code works well for sendBroadcastReceiver.
But in the case of BroadcastReciever delivery, receiver () never listens for delivery. So delivery BroadcastReciever is registered for each sms mailing.
So I tried with onstop ()
@Override protected void onStop() {
But onStop () does not register the last registered delivery instance for the BroadcastReceiver object only. If I send sms twice, there will be two delivery objects BroadcastReceiver and onstop () will unregister only the last object. Please help me with friends.