Activity has leaked IntentReceiver

我只是一个虾纸丫 提交于 2019-11-28 20:02:31

Create a custom receiver like this

class deliverReceiver extends BroadcastReceiver {     
@Override
 public void onReceive(Context context, Intent arg1) {
             switch (getResultCode())
             {
                 case Activity.RESULT_OK:
                     Toast.makeText(getBaseContext(), "SMS delivered", 
                             Toast.LENGTH_SHORT).show();
                     break;
                 case Activity.RESULT_CANCELED:
                     Toast.makeText(getBaseContext(), "SMS not delivered", 
                             Toast.LENGTH_SHORT).show();
                     break;                        
             }

         }
}

and a sent reciever like this..

class sentReceiver extends BroadcastReceiver {     
@Override
 public void onReceive(Context context, Intent arg1) {
             switch (getResultCode())
             {
                 case Activity.RESULT_OK:
                     Toast.makeText(getBaseContext(), "SMS sent", 
                             Toast.LENGTH_SHORT).show();
                     break;
                 case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                     Toast.makeText(getBaseContext(), "Generic failure", 
                             Toast.LENGTH_SHORT).show();
                     break;
                 case SmsManager.RESULT_ERROR_NO_SERVICE:
                     Toast.makeText(getBaseContext(), "No service", 
                             Toast.LENGTH_SHORT).show();
                     break;
                 case SmsManager.RESULT_ERROR_NULL_PDU:
                     Toast.makeText(getBaseContext(), "Null PDU", 
                             Toast.LENGTH_SHORT).show();
                     break;
                 case SmsManager.RESULT_ERROR_RADIO_OFF:
                     Toast.makeText(getBaseContext(), "Radio off", 
                             Toast.LENGTH_SHORT).show();
                     break;
             }


         }

now in sendSMS method after this

 PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,
         new Intent(DELIVERED), 0);

put

registerReceiver(sentReceiver,SENT);
registerReceiver(deliverReceiver,DELIVERED);

Now override onpause and unregister for the receivers like this..

unregisterReceiver(sentReceiver);
unregisterReceiver(deliverReceiver);
5hssba

You should unregister the receivers in onPause() and register them in onResume(). This way, when Android destroys and recreates the activity for the configuration change, or for any reason you will still have receivers set up.

You have registered two broadcast receivers in your activity. In onDestroy of your activity, unregister both the receivers. Refer http://developer.android.com/reference/android/content/ContextWrapper.html#unregisterReceiver(android.content.BroadcastReceiver).

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!