Unregister broadcast calls before onReceive () listens

I am working on an android sms application. The following code that I used to send SMS.

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; } } }; 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; } } }; registerReceiver(deliveryBroadcastReciever, new IntentFilter(DELIVERED)); SmsManager sms = SmsManager.getDefault(); sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI); unregisterReceiver(sendBroadcastReceiver); unregisterReceiver(deliveryBroadcastReciever); } 

Now my problem is that I am sending sms. A transmission unregistered before sentsms reaches the onreceive() block. So onReceive () is not available in most cases. If I do not write an unregistered call, then while sending the second sms.The onreceive() will listen to both the first and second sms.

Therefore, please help solve this problem by making an unregistered call after completing onreceive() .

+4
source share
1 answer

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() { // TODO Auto-generated method stub super.onStop(); unregister(deliveryBroadcastReceiver); } 

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.

0
source

All Articles