registerReceiver - onReceive executado 2 vezes

0 respostas
F
Olá! Eu tenho um fonte para envio de sms, que é o seguinte:
//Envia sms automaticamente
    private void sendSMS(String phoneNumber, String message, int nIdReg){      
    	String SENT = "SMS_SENT"+Integer.toString(nIdReg);
        String DELIVERED = "SMS_DELIVERED"+Integer.toString(nIdReg);
        
        Intent iSent = new Intent(SENT);
        Intent iDelivered = new Intent(DELIVERED);
        
        iSent.putExtra("nId", nIdReg);
        iSent.putExtra("cPh", phoneNumber);
        iSent.putExtra("cMsg", message);
        iDelivered.putExtra("nId", nIdReg);
        iDelivered.putExtra("cPh", phoneNumber);
         
        PendingIntent sentPI = PendingIntent.getBroadcast(this, 0,iSent, 0);
        PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,iDelivered, 0);
        
        //Mensagem enviada com ou sem sucesso
        registerReceiver(new BroadcastReceiver(){
        	@Override
        	public void onReceive(Context arg0, Intent arg1){
            	int nId = arg1.getIntExtra("nId",0);
            	int nIdApp = R.string.app_name+nId;
            	String cPh = arg1.getStringExtra("cPh");
            	String cMsg = arg1.getStringExtra("cMsg");
            	String cN = "0";
            	            	
            	switch (getResultCode()){
                	case Activity.RESULT_OK:
                		log.insert(nId,"O sms foi enviado para o número "+cPh+" com sucesso",db);
                		cN = "1";
                		break;
                	case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                     	        log.insert(nId,"Não foi possível enviar o sms para o número "+cPh+". Erro genérico, verifique o crédito",db);
                    	        startNotification("Erro ao enviar sms","Erro genérico","O sms não foi enviado para o número "+cPh+". Verifique os logs clicando aqui.",nIdApp,nId,false);
                         	break;
                    case SmsManager.RESULT_ERROR_NO_SERVICE:
                    	log.insert(nId,"Não foi possível enviar o sms para o número "+cPh+". Fora de área/serviço",db);
                    	startNotification("Erro ao enviar sms","Fora de área/serviço","O sms não foi enviado para o número "+cPh+". Verifique os logs clicando aqui.",nIdApp,nId,false);
                    	break;
                    case SmsManager.RESULT_ERROR_NULL_PDU:
                    	log.insert(nId,"Não foi possível enviar o sms para o número "+cPh+". PDU nulo",db);
                    	startNotification("Erro ao enviar sms","PDU nulo","O sms não foi enviado para o número "+cPh+". Verifique os logs clicando aqui.",nIdApp,nId,false);
                    	break;
                    case SmsManager.RESULT_ERROR_RADIO_OFF:
                    	log.insert(nId,"Não foi possível enviar o sms para o número "+cPh+". Radio off",db);
                    	startNotification("Erro ao enviar sms","Radio off","O sms não foi enviado para o número "+cPh+". Verifique os logs clicando aqui.",nIdApp,nId,false);
                    	break;
                }
            	String[][] aDados = {{"ultok",cN}};
        		db.update("datas",aDados,pk+"='"+Integer.toString(nId)+"'");
        	}
        }, new IntentFilter(SENT));
 
        //Mensagem entregue com sucesso
        registerReceiver(new BroadcastReceiver(){
            @Override
            public void onReceive(Context arg0, Intent arg1) {
            	int nId = arg1.getIntExtra("nId",0);
            	int nIdApp = R.string.app_name+nId;
            	String cPh = arg1.getStringExtra("cPh");
            	
            	switch (getResultCode()){
                    case Activity.RESULT_OK:
                    	log.insert(nId,"O sms foi entregue para o número "+cPh+" com sucesso",db);
                    	
                    	break;
                    case Activity.RESULT_CANCELED:
                    	log.insert(nId,"Não foi possivel entregar o sms para o número "+cPh+" com sucesso",db);
                    	String[][] aDados = {{"ultok","0"}};
    	        		db.update("datas",aDados,pk+"='"+Integer.toString(nId)+"'");
    	        		startNotification("Erro ao entregar o sms","Não foi possivel entregar o sms","O sms não foi entregue para o número "+cPh,nIdApp,nId,false);
                    	break;
                }
            }
        }, new IntentFilter(DELIVERED));        
 
        SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);        
    }

Acontece que a função é executada uma única fez quando envio o sms ( verifiquei através do "Log.d" ), mas dentro do "onReceive" ( que está dentro do "registerReceiver"), seja do envio, seja da confirmação de entrega, as vezes executa mais de uma vez para o mesmo envio de sms, o que está atrapalhando os meus logs ( os logs são gravados através de uma classe própria "log" - log.insert no fonte acima ).
O que esta errado, porque o "onReceive" é executado duas vezes?

Obrigado.

Criado 15 de julho de 2012
Respostas 0
Participantes 1