2012-02-05 19 views

答えて

5

これは1つずつ行う必要があります。アクティビティにはあまり多くのものがあるべきではないので、これはあまりに面倒であるとは思わないでしょう。

5

私はそれが古い質問です知っているが、なぜあなたは、すべての受信機が登録を解除するトリガー意図をピックアップしてbroadcastreceiversを使用していませんか? は、あなたがこれを置く応答フラグメント/活動において

(現在の答えは提供よりも、より正確なものを投稿する募集):

public class PanicFragment extends Fragment { 

    IntentFilter killFilter = new IntentFilter("your.app.name.some.awesome.action.title"); 

    BroadcastReceiver kill = new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     context.unregisterReceiver(receiver); // The actual receiver you want to unreigster 
     context.unregisterReceiver(this); // The one you just created 

    } 
    }; 

(フラグメントを作成する際に最初に受信機を登録することを忘れないでください/私はこのことを願っています

private void callThisToUnregisterAllYourReceivers(Context context) { 
    Intent killThemAll = new Intent(); 
    killThemAll.setAction("your.app.name.some.awesome.action.title"); 
    context.sendBroadcast(killThemAll); 
    } 

そして、あなたのサービスや他の活動または任意の活動)あなたはこれをしたいです便利

+1

これは、上記のいずれかが受け入れ答えである理由を確認してください最も効率的な答えは、そうではありません。 –

0

どのような方法で、私は他の放送受信機を削除するには、別のBroadcastReceiverを使用することはありませんでした。ここで

は、私は私のアプリケーションクラスに追加するものです。

private static List<BroadcastReceiver> broadcastReceivers = new LinkedList<>(); 

public void addReceiver(BroadcastReceiver receiver, IntentFilter filter) { 
    mContext.registerReceiver(receiver, filter); 
    broadcastReceivers.add(receiver); 
} 

public void removeReceiver(BroadcastReceiver receiver) { 
    unregisterReceiver(receiver); 
    broadcastReceivers.remove(receiver); 
} 

public List<BroadcastReceiver> getAllReceivers() { 
    return broadcastReceivers; 
} 

public void removeAllReceivers() { 
    for (BroadcastReceiver receiver : getAllReceivers()) { 
     removeReceiver(receiver); 
    } 
} 
関連する問題