簡體   English   中英

Android-借助BroadcastReceiver檢查互聯網和Wi-Fi連接?

[英]Android - check internet and Wi-Fi connectivity with the help of BroadcastReceiver?

我想檢查互聯網和Wi-Fi連接。 我已經實現了代碼。 但是在此代碼中,問題是,當我在設備中激活Wi-Fi時,它會連續舉起3-4次“ Wi-Fi斷開連接”和“ Internet連接”,然后最后舉起“ Wi-Fi已連接”的消息,然后我的Wi-Fi連接在我的設備中顯示為已啟用。 啟用或禁用Wi-Fi時,我只需要檢查一次Wi-Fi連接。 謝謝。

爪哇

public class ConnectionReceiver extends BroadcastReceiver {

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

        boolean isConnectedInternet = 
                intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);

        ConnectivityManager wifiConn = 
                (ConnectivityManager) context.getSystemService(context.CONNECTIVITY_SERVICE);

        NetworkInfo mWifi = wifiConn.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

        if (mWifi.isConnected()) {

            Toast.makeText(context, "Wifi Conected", Toast.LENGTH_LONG).show();
        }
        else {

            Toast.makeText(context, "Wifi disconnected", Toast.LENGTH_LONG).show();
        }

        if(isConnectedInternet){
            Toast.makeText(context, "Internet Connection Lost", Toast.LENGTH_LONG).show();
        }
        else{
            Toast.makeText(context, "Internet Connected", Toast.LENGTH_LONG).show();
        }
    }

}

清單

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

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

我不太清楚,但可能是您一次收到所有事件(CONECTIVITY_CHANGE,WIFI_STATE_CHANGED和STATE_CHANGE)。 就我的理解而言,CONNECTIVITY_CHANGE應該足夠了。 您應該閱讀開發文檔中的詳細信息。

從清單中刪除以下兩行:

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

看一下文檔: http : //developer.android.com/reference/android/net/ConnectivityManager.html#CONNECTIVITY_ACTION

我有我的連接,您可以使用它。

      public class ConnectionDetector {
        private Context _context;
        public ConnectionDetector(Context context){
        this._context = context;
        }

        public boolean isConnectingToInternet(){
        ConnectivityManager connectivity = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivity != null)
        {
        NetworkInfo[] info = connectivity.getAllNetworkInfo();
        if (info != null)
        for (int i = 0; i < info.length; i++)
            if (info[i].getState() == NetworkInfo.State.CONNECTED){
                return true;
             }

        }
        return false;
        }
}

和你的活動中..

if (new ConnectionDetector(this).isConnectingToInternet()){
         Toast.makeText(context, "Wifi Conected", Toast.LENGTH_LONG).show();
        }
        else {

            Toast.makeText(context, "Wifi disconnected", Toast.LENGTH_LONG).show();
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM