2012-02-05 62 views

回答

5

你必須一個一個去做。一個活動不應該有很多,如果有的話,所以我不希望這太繁瑣。

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

這是最有效的答案,所以不知道爲什麼上面的一個是公認的答案。 – 2016-02-05 06:02:52

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); 
    } 
} 
相關問題