2016-10-13 43 views
0

我想宣佈廣播接收器爲我的應用程序的所有活動,以檢測互聯網的共存時間。如此做?謝謝如何向廣播接收器聲明許多活動? Android

清單

<receiver 
      android:name=".managers.ConnectionReceiver" 
      android:label="NetworkChangeReceiver" > 
      <intent-filter> 
       <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
      </intent-filter> 
     </receiver> 

類擴展BroadcastReceiver的

public class ConnectionReceiver extends BroadcastReceiver { 

    ConnectionListener connectionListener = new MainActivity(); 
    ConnectivityManager connectivityManager; 
    NetworkInfo activeNetInfo; 

    public ConnectionReceiver() { 
} 

@Override 
public void onReceive(Context context, Intent intent) { 
    connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    activeNetInfo = connectivityManager.getActiveNetworkInfo(); 
    if (activeNetInfo != null) { 
     connectionListener.onConnect(); 
    }else{ 
     connectionListener.onDisconnect(); 
    } 
} 
+0

的[編程方式註冊的廣播接收器]可能的複製(http://stackoverflow.com/questions/4805269/programmatically-register-a-broadcast-receiver) – Beloo

回答

1

最簡單的方法是創建您的所有活動的定義從有這種行爲,子類的父類。

例如...

class ConnectionListeningActivity extends Activity { 

    protected boolean isConnected; 

    BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 
     void onReceive(Context context, Intent intent) { 
       updateNetworkState(); 
     } 
    }; 

    public void updateNetworkState() { 
     ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 

     NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
     isConnected = activeNetwork != null && 
        activeNetwork.isConnectedOrConnecting(); 
    } 

    public void onResume() { 
     registerReceiver(broadcastReceiver, new IntentFilter(android.net.ConnectivityManager.CONNECTIVITY_ACTION)); 
     updateNetworkState(); 
    } 

    public void onPause() { 
     unregisterReceiver(broadcastReceiver); 
    } 

} 

在這裏,我們所註冊的廣播接收器中的onResume方法和未註冊它的onPause所以它不是積極活動時是沒有的。

我們還更新中的onResume的isConnected狀態,因爲我們可能會或可能不會收到networkStateChange在第一次使用前isConnected ..

現在我們可以創建一個使用isConnected領域進行一些子類行動..

0

在所有活動中,創建廣播接收器的實例並註冊廣播接收器。

ConnectionReceiver receiver = new ConnectionReceiver(); 
IntentFilter filter = new IntentFilter(); 
filter.addAction("ACTION HERE"); 
getApplicationContext().registerReceiver(receiver, filter) 

注:由於在onPause取消註冊接收機的onStop()方法()方法是多任務期間調用中的Android 7和在onStart(重新註冊接收機)代替的onResume()

0

添加以下行在活動你想

ConnectionReceiver receiver = new ConnectionReceiver(); 

    public void onResume(){ 
    super.onResume(); 
    registerReceiver(receiver ,new IntentFilter("action_to_perform")); 
    } 

    public void onPause(){ 
    super.onPause(); 
    unregisterreceiver(receiver); 
    }