2016-11-28 2 views
0

Моя проблема здесь Я просочился из registedReceiver. Я искал любую инструкцию о том, как я должен закрыть registedReceiver, которым они инструктируют, что вы должны закрыть ее в onPause или ondestroy, но я не могу найти ничего о том, как я закрываю свою.Android - как удалить регистрацию в регистреРецептор из другого класса

Мой код

public class SMSHandler{  

    String SENT = "SMS_SENT"; 
    String DELIVERED = "SMS_DELIVERED"; 

    public SMSHandler(Context context, String phoneNum, String message){ 
     sendSMS(context,phoneNum,message); 
    } 

    private void sendSMS(Context context,String phoneNum, String message) { 

     PendingIntent sentPI = PendingIntent.getBroadcast(context, 0, new Intent(
       SENT), 0); 

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

     // when the sms has been sent 
     context.registerReceiver(new BroadcastReceiver(){ 

      @Override 
      public void onReceive(Context context, Intent intent) { 
       // TODO Auto-generated method stub 
       switch(getResultCode()){ 
       case Activity.RESULT_OK: 
        Toast.makeText(context, "SMS sent", Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_GENERIC_FAILURE: 
        Toast.makeText(context, "Generic Failure", Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_NO_SERVICE: 
        Toast.makeText(context, "No Service", Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_NULL_PDU: 
        Toast.makeText(context, "Null PDU", Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_RADIO_OFF: 
        Toast.makeText(context, "Radio off", Toast.LENGTH_SHORT).show(); 
        break; 
       } 
      } 
     },new IntentFilter(SENT)); 

     context.registerReceiver(new BroadcastReceiver(){ 

      @Override 
      public void onReceive(Context context, Intent intent) { 
       // TODO Auto-generated method stub 
       switch(getResultCode()){ 
       case Activity.RESULT_OK: 
        Toast.makeText(context, "SMS delivered", Toast.LENGTH_SHORT).show(); 
        break; 
       case Activity.RESULT_CANCELED: 
        Toast.makeText(context, "SMS note delivered", Toast.LENGTH_SHORT).show(); 
        break; 
       } 
      } 

     }, new IntentFilter(DELIVERED)); 

     SmsManager sms = SmsManager.getDefault(); 
     sms.sendTextMessage(phoneNum, null, message, sentPI, deliveredPI); 
    } 
} 
+0

Вы не можете отменить регистрацию анонимного объекта. Попробуйте сохранить ссылку где-нибудь, где вы можете поделиться получателем с другими клиентами. – JoxTraex

ответ

0

Это, как вам нужно зарегистрироваться и разрегистрировать приемник ...

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     //Your on receive code here... 
    } 
}; 

@Override 
public void onDestroy() { 
super.onDestroy(); 
RTLog.d(TAG, "Destroy Called"); 
//unregister the receiver 
getActivity().unregisterReceiver(broadcastReceiver); 

}

+0

где этот таймерBroadcastReceiver? Я знаю, что в unregisterReceiver вам нужен Broadcastreceiver в качестве параметра, но как я могу назвать этот передатчик, который я установил? –

+0

Смотрите мой отредактированный код ... он четко показывает, что вам нужно – Jayamurugan

0

Вы используете BroadcastReceiver Анонимно, нет какого-либо конкретного объекта который имеет отношение к этому классу. Используйте их внутри другого класса и используйте здесь с объектом, доступ к которому вы можете получить там, где хотите.