2016-11-28 5 views
0

私の問題はここで私はregistedReceiverから漏洩します。私は、あなたがonPauseまたはondestroyにそれを閉じなければならないことを彼らが指示するregistedReceiverをどのように閉じなければならないかについての指示を検索しましたが、私が私のものを閉じる方法については何も見つかりません。あなたはBroadCastReceiver匿名を使用しているAndroid - 他のクラスからregisterReceiverを登録解除するには

マイコード

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

そのtimerBroadcastReceiverはどこから来たのですか? 私はunregisterReceiverにパラメータとしてBroadcastreceiverが必要だと知っていますが、私が設定したそれらのbroadcastreceiverをどのように呼び出す必要がありますか? –

+0

私の編集したコードを見てください...あなたが必要とするものを明確に示します – Jayamurugan

0

は、何ら具体的な目的はありませんこれらのクラスを参照しています。それらを別のクラスの中で使用し、ここでオブジェクトを使用して、どこからでもアクセスできます。

関連する問題