【问题标题】:Android - check internet and Wi-Fi connectivity with the help of BroadcastReceiver?Android - 在 BroadcastReceiver 的帮助下检查互联网和 Wi-Fi 连接?
【发布时间】:2015-03-13 18:12:25
【问题描述】:

我想检查互联网和 Wi-Fi 连接。我已经实现了代码。但在这段代码中,问题是,当我在我的设备中激活 Wi-Fi 时,它会连续显示“Wi-Fi 已断开”和“已连接互联网”3-4 次,最后会显示“已连接 Wi-Fi”和然后我的 Wi-Fi 连接在我的设备中显示为启用。我只需要在启用或禁用 Wi-Fi 时检查一次 Wi-Fi 连接。 谢谢。

Java

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>

【问题讨论】:

    标签: java android android-intent android-wifi android-broadcast


    【解决方案1】:

    我有我的连接,你可以使用它..

          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();
            }
    

    【讨论】:

      【解决方案2】:

      我不确切知道,但可能是您一次收到所有事件(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

      【讨论】:

      • 只需删除其他两个的意图过滤器。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多