2016-07-13 23 views
0

私は、アラームを作成するためのアクティビティ "AddReminder"を持っています。放送受信機は、アラームが生成されるたびに登録されます。他のアクティビティでは、作成されたすべてのアラームがリストビューで表示されます。ユーザーがリストビューの1つをクリックすると、ユーザーはアラームを削除できます。リストビューからアラームを削除することは問題ありません。しかし、私はどのように削除アラーム活動から放送受信機の登録を解除するのか分かりません。アラーム他の活動に登録されている放送受信機の登録を解除するには?

@Override 
     public void onClick(View view) { 
      title_text = title.getText().toString(); 
      desc_text = desc.getText().toString(); 
      if(location.getSelectedItem()==null) 
       return; 
      else 
       place_text = location.getSelectedItem().toString(); 
      int id = group.getCheckedRadioButtonId(); 
      radioButton = (RadioButton)findViewById(id); 
      point_text = radioButton.getText().toString(); 

      //Log.d("location", place_text); 
      //Toast.makeText(getApplicationContext(), title_text + " " + desc_text + " " + place_text, Toast.LENGTH_LONG).show(); 

      if (!validateTitle()) { 
       return; 
      } 

      if (!validateDesc()) { 
       return; 
      } 

      if (!validatelocation()) { 
       return; 
      } 

      if(!validatePoints()){ 
       return; 
      } 

      reminder rmd = new reminder(getApplicationContext(), title_text, desc_text, place_text, point_text); 
      rmd.registerReceiver(); 

      submit(rmd); 
      Toast.makeText(getApplicationContext(), "Success!", Toast.LENGTH_LONG).show(); 
      finish(); 

     } 

アラームクラス

public class reminder { 
private Context context; 
private String title, desc, location, point; 
private AlarmReceiver receiver; 

public reminder(){ 

} 

public reminder(Context context, String title, String desc, String location, String point){ 
    this.context = context; 
    this.title = title; 
    this.desc = desc; 
    this.location = location; 
    this.point = point; 
} 

public String getTitle() { 
    return title; 
} 

public void setTitle(String title) { 
    this.title = title; 
} 

public String getDesc() { 
    return desc; 
} 

public void setDesc(String desc) { 
    this.desc = desc; 
} 

public String getLocation() { 
    return location; 
} 

public void setLocation(String location) { 
    this.location = location; 
} 

public String getPoint() { 
    return point; 
} 

public void setPoint(String point) { 
    this.point = point; 
} 

public void registerReceiver() { 
    receiver = new AlarmReceiver(context, title, desc, location, point); 
    IntentFilter intentFilter1 = new IntentFilter(); 
    intentFilter1.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); 
    context.registerReceiver(receiver, intentFilter1); 
} 

public void unregisterReceiver(int id){ 
    context.unregisterReceiver(receiver); 
} 

アダプタOnItemClickListener(その他の活動)

listrmd.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      position2 = id; 
      AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
      builder.setIcon(R.drawable.ic_menu_manage); 
      builder.setTitle("Option"); 
      builder.setAdapter(adapter2, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        if(which == 0){ //edit option 
         Toast.makeText(getActivity(), "Edit", Toast.LENGTH_LONG).show(); 
        } 
        else{ //delete option 
         boolean flag = myDb.removeReminder(position2); 
         if(flag) 
          Toast.makeText(getActivity(), "Success", Toast.LENGTH_LONG).show(); 
          //I WANT TO UNREGISTER BROADCAST RECEIVER HERE 
         else 
          Toast.makeText(getActivity(), "Failed", Toast.LENGTH_LONG).show(); 
         updateList(); 
        } 
       } 
      }); 
      builder.show(); 
     } 
    }); 
を追加する

ボタン210

お願いします。

答えて

0

あなたが同じActivityであなたのBroadcastReceiverの登録を解除していない場合は、メモリリークが発生することができますので、あなたは、唯一のオリジナルActivity内のこれらのブロードキャストを使用して検討すべきです。

バックグラウンドでブロードキャストイベントを受信する場合は、hereのようなサービスの使用を検討する必要があります。

より完全な回答hereを確認することができます。

+0

こんにちは、応答していただきありがとうございます...サービスはインテントフィルタアクションを実行できますか?どうすればいいの?どのような例ですか? –

+0

ドキュメントは既に回答にリンクしていますが、より具体的な例[こちら](http://stackoverflow.com/questions/9092134/broadcast-receiver-within-a-service/9092277#9092277)をご確認ください。 –

+0

私はサービスを使用して同じではありませんか?私はまだ作成されたすべてのアラームのサービスを作成する必要があります –

0

アクティビティから移動する場合は、これらのイベントを適切に処理するためにOnStop、OnPause、OnDestroy ...メソッドを適切にオーバーライドして適切にクリーンアップする必要があります。

一般的に、アプリのすべてのコンポーネント(UI以外のコンポーネントを含む)は、それ自身の後にクリーンアップし、クリーンアップするために他のコンポーネントに残さないようにしてください。

関連する問題