Я хочу проверить подключение к Интернету и Wi-Fi. Я реализовал код. Но в этом коде проблема в том, что когда я активирую Wi-Fi на своем устройстве, он непрерывно всплывает 3-4 раза «Wi-Fi отключен» и «Интернет подключен», а затем, наконец, всплывает «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();
        }
    }

}

< Сильный > Menifest

<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>
0
Gaurav Deshpande 13 Мар 2015 в 21:12

2 ответа

Лучший ответ

У меня есть мое соединение, вы можете его использовать ..

      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();
        }
0
Adnan Ali 13 Мар 2015 в 18:35

Я точно не знаю, но может случиться так, что вы получите все события один раз (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

0
neofu 13 Мар 2015 в 18:27