[Android] Como lidar com a IllegalArgumentException que está sendo lançada aqui

Oi gente,

estou registrando um BroadcastReceiver no onCreate da minha Activity dessa forma:

registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                String message = null;		                
                switch (getResultCode()) {
                case Activity.RESULT_OK:
                    message = "Message sent!";		                    
                    break;
                case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                    message = "Error.";
                    break;
                case SmsManager.RESULT_ERROR_NO_SERVICE:
                    message = "Error: No service.";
                    break;
                case SmsManager.RESULT_ERROR_NULL_PDU:
                    message = "Error: Null PDU.";
                    break;
                case SmsManager.RESULT_ERROR_RADIO_OFF:
                    message = "Error: Radio off.";
                    break;
                }

                Toast.makeText(DetalhesContato.this, message, Toast.LENGTH_LONG).show();
            }
        }, new IntentFilter("SMS_SENT_ACTION"));

E “disregistrando” no onDestroy dessa forma:

protected void onDestroy() {
		if(processoEnviarSMS) {
			processoEnviarSMS = false;
			
			unregisterReceiver(new BroadcastReceiver() {
	            @Override
	            public void onReceive(Context context, Intent intent) {
	                String message = null;		                
	                switch (getResultCode()) {
	                case Activity.RESULT_OK:
	                    message = "Message sent!";		                    
	                    break;
	                case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
	                    message = "Error.";
	                    break;
	                case SmsManager.RESULT_ERROR_NO_SERVICE:
	                    message = "Error: No service.";
	                    break;
	                case SmsManager.RESULT_ERROR_NULL_PDU:
	                    message = "Error: Null PDU.";
	                    break;
	                case SmsManager.RESULT_ERROR_RADIO_OFF:
	                    message = "Error: Radio off.";
	                    break;
	                }

	                Toast.makeText(DetalhesContato.this, message, Toast.LENGTH_LONG).show();
	            }
	        });
		}
		super.onDestroy();
	}

Mas estou recebendo IllegalArgumentException quando eu saio dessa Activity, afirmando que o receiver não foi registrado.

Alguém saberia como resolver essa situação?

Desde já agradeço.

Voce está criando um novo BroadcastReceiver na hora de unregistrar.

Voce precisa usar a mesma instancia.

BroadcastReceiver receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                String message = null;		                
                switch (getResultCode()) {
                case Activity.RESULT_OK:
                    message = "Message sent!";		                    
                    break;
                case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                    message = "Error.";
                    break;
                case SmsManager.RESULT_ERROR_NO_SERVICE:
                    message = "Error: No service.";
                    break;
                case SmsManager.RESULT_ERROR_NULL_PDU:
                    message = "Error: Null PDU.";
                    break;
                case SmsManager.RESULT_ERROR_RADIO_OFF:
                    message = "Error: Radio off.";
                    break;
                }

                Toast.makeText(DetalhesContato.this, message, Toast.LENGTH_LONG).show();
            }
        };
registerReceiver(receiver, new IntentFilter("SMS_SENT_ACTION"));

Dai no onDestroy


protected void onDestroy() {
		if(processoEnviarSMS) {
			processoEnviarSMS = false;
			unregisterReceiver(receiver);
		}
		super.onDestroy();
	}

Deu certo! =] Muito, muito obrigada Marky!

[Resolvido]

Boa tarde, prq vc não mapeia seu broadcastreceiver no androidMainiFest.xml? pra manutenção é bem melhor, fica a dica.

Oi srmachado,

A solução que o Marky deu funcionou direitinho, mas obrigada pela dica. =]