2012-11-09 128 views
0

我有BroadcastReceiver(NetworkListener)。在手機重新啓動時取消廣播接收器。

public class NetworkReceiver extends BroadcastReceiver { 
Context context; 
public static NetworkReceiver instance = new NetworkReceiver(); 
public static InnerObservable observable = instance. new InnerObservable(); 
... 

該接收器發送通知:

@Override 
public void onReceive(Context ctx, Intent intent) { 

    Log.d("tag", "onReceive"); 

    NotificationManager notif = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE); 
    Notification notification = new Notification(android.R.drawable.ic_dialog_alert,"bla-bla-bla",System.currentTimeMillis()); 

清單文件:

<receiver 
     android:name="com.mypckg.network.NetworkReceiver" > 
     <intent-filter> 
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
     </intent-filter> 
    </receiver> 

它工作正常。但是在電話重新啓動後,它會繼續工作。如何避免它?

回答

1

如果你希望你的廣播接收器開始工作,當應用程序被啓動,那麼你應該註冊/從您的主要活動編程註銷它:

private BroadcastReceiver networkReceiver; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    networkReceiver = new NetworkReceiver(); 
    registerReceiver(networkReceiver, ConnectivityManager.CONNECTIVITY_ACTION); 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    unregisterReceiver(networkReceiver) 
} 
+0

我是否從清單中刪除接收者? –

+0

是的,否則它仍然會在啓動時啓動 – fiddler

+0

請注意,使用此解決方案時,廣播接收器將切換到其他活動時停止。如果你希望接收者的生命週期與應用程序的生命週期相同,那麼你應該在Application類中做到這一點 – fiddler

1

您可以用PackageManager浪費時間來禁止註冊的廣播接收器您的清單,檢查this thread for code.

另一種解決方案是動態註冊此接收器,可能在服務中。只要服務處於活動狀態,接收器就會處於活動狀態並進行註冊,因此您可以通過啓動/停止服務輕鬆切換接收器。這可能不適合你的用例,但你沒有提供更多的細節。