android service教學 - 當wifi或3g網絡狀態改變時,BroadcastReceiver




3 Answers

你需要

<intent-filter>
<action android:name="android.net.wifi.WIFI_STATE_CHANGED"/>
<action android:name="android.net.wifi.STATE_CHANGE"/>
</intent-filter>

在你的receiver標籤。

或者如果你想要更多地控制它,在註冊BroadcastReceiver之前設置它們:

final IntentFilter filters = new IntentFilter();
filters.addAction("android.net.wifi.WIFI_STATE_CHANGED");
filters.addAction("android.net.wifi.STATE_CHANGE");
super.registerReceiver(yourReceiver, filters);

WIFI_STATE_CHANGED

廣播<intent-action>表示已啟用,禁用,啟用,禁用或未知Wi-Fi。 一個額外提供此狀態為int。 另一個額外提供以前的狀態,如果可用。

STATE_CHANGE

廣播<intent-action>表示Wi-Fi連接狀態已更改。 一個額外的以NetworkInfo對象的形式提供新狀態。 如果新狀態是CONNECTED,則附加額外可以提供接入點的BSSID和WifiInfo。 作為一個字符串

此外,您還需要在manifest標記內指定正確的權限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

要檢查連接性,可以使用ConnectivityManager因為它會告訴您可用的連接類型。

ConnectivityManager conMngr = (ConnectivityManager)this.getSystemService(this.CONNECTIVITY_SERVICE);
android.net.NetworkInfo wifi = conMngr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
android.net.NetworkInfo mobile = conMngr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
download onstop

我有一個應用程序,只要手機連接到WiFi,它就會更新數據庫。 我已經實現了一個ServiceBroadcastReceiver來運行Service (它會告訴我正在使用什麼網絡),但問題是我不知道在manifest文件中添加什麼來在網絡狀態發生變化時啟動BroadcastReceiver它連接到某種網絡







聲明intent過濾器以傳遞給broadcastreceiver

IntentFilter filter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);
registerReceiver(mReceiver, filter);

在廣播接收器中,檢查EXTRA_WIFI_STATE;

private BroadcastReceiver mReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();

        switch (action)
        {
            case WifiManager.WIFI_STATE_CHANGED_ACTION:
                int extra = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,0);
                if(extra==WifiManager.WIFI_STATE_ENABLED)
                {

                }//...else WIFI_STATE_DISABLED, WIFI_STATE_DISABLING, WIFI_STATE_ENABLING
                break;
        }

    }
};



Related

android android-service