缺少unregisterReceiver()

时间:2014-12-05 09:45:22

标签: android android-broadcast

错误

Activity has leaked IntentReceiver that was originally registered here.
Are you missing a call to unregisterReceiver()?

代码

public void sendSMS(String phoneNumber, String message) {
    String SENT = "SMS has been sent";
    String DELIVERED = "SMS has been delivered";
    PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(SENT), 0);
    PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, new Intent(DELIVERED), 0);
    registerReceiver(new BroadcastReceiver() {
        @Override
        public void onReceive(Context arg0, Intent arg1) {
            switch (getResultCode()) {
            case Activity.RESULT_OK:
                Log.e("","===  RESULT_OK_1");
                break;
            case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                Toast.makeText(
                        getBaseContext(),
                        "Generic failure. May be insufficient balance into SIM 1",
                        Toast.LENGTH_SHORT).show();
                linlaHeaderProgress.setVisibility(View.GONE);
                onCreate(savedInstanceState);
                break;
            case SmsManager.RESULT_ERROR_NO_SERVICE:
                Toast.makeText(getBaseContext(), "No service", Toast.LENGTH_SHORT).show();
                linlaHeaderProgress.setVisibility(View.GONE);
                onCreate(savedInstanceState);
                break;
            case SmsManager.RESULT_ERROR_NULL_PDU:
                Toast.makeText(getBaseContext(), "Null PDU", Toast.LENGTH_SHORT).show();
                linlaHeaderProgress.setVisibility(View.GONE);
                onCreate(savedInstanceState);
                break;
            case SmsManager.RESULT_ERROR_RADIO_OFF:
                Toast.makeText(getBaseContext(), "Radio off", Toast.LENGTH_SHORT).show();
                linlaHeaderProgress.setVisibility(View.GONE);
                onCreate(savedInstanceState);
                break;
            }
        }
    }, new IntentFilter(SENT), null, null);

    registerReceiver(new BroadcastReceiver() {
        @Override
        public void onReceive(Context arg0, Intent arg1) {
            switch (getResultCode()) {
            case Activity.RESULT_OK:
                Log.e("","== delivered BroadcastReceiver called now ==");
                if (GlobalConfig.user_verification) {
                    Log.e("","== user_verification== true ");
                /*  isInternetPresent = di.isConnectingToInternet();
                    if (!isInternetPresent) {
                        CustomObjects.CustomAlert(SignUpScreen.this, "Please enable internet ").show();
                    } else {
                        Log.e("","=== user verified");
                        if (flag == 0) {
                            flag = 1;
                            Log.e("","== user register start");
                            new Thread(waitThread).start();
                        }
                    }*/
                } else {
                    CustomObjects
                            .CustomAlert(SignUpScreen.this, "User verification failed !")
                            .show();
                    onCreate(savedInstanceState);
                }
                break;
            case Activity.RESULT_CANCELED:
                linlaHeaderProgress.setVisibility(View.GONE);
                setContentView(R.layout.sign_up_screen);
                Toast.makeText(getBaseContext(), "SMS not delivered", Toast.LENGTH_SHORT).show();
                break;
            }
        }
    }, new IntentFilter(DELIVERED), null, null);

    SmsManager sms = SmsManager.getDefault();
    sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);
}

1 个答案:

答案 0 :(得分:1)

您错过了对unregisterReceiver()的来电,因为我看不到。

Activity停止时,您应该拨打此电话。也许是这样的:

private BroadcastReceiver broadcastReceiverSent = ...;
private BroadcastReceiver broadcastReceiverDelivered = ...;

... {
    registerReceiver(broadcastReceiverSent);
    registerReceiver(broadcastReceiverDelivered);
}

@Override
void onStop() {
    unregisterReceiver(broadcastReceiverSent);
    unregisterReceiver(broadcastReceiverDelivered);
}