2

Я хочу проверить подключение к Интернету и Wi-Fi. Я реализовал код. Но в этом коде проблема заключается в том, что когда я активирую Wi-Fi на своем устройстве, то он постоянно тосты «Wi-Fi отключен» и «Интернет подключен» 3-4 раза, а затем, в конце концов, он тосты «Wi-Fi подключен» и то мое соединение Wi-Fi появляется на моем устройстве. Мне нужно проверить соединение Wi-Fi только один раз, когда я включаю или выключаю Wi-Fi. Спасибо.Android - проверьте подключение к Интернету и Wi-Fi с помощью BroadcastReceiver?

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

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

 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

Я не знаю точно, но это может быть, что вы получите все события, один раз (CONECTIVITY_CHANGE, WIFI_STATE_CHANGED и STATE_CHANGE). Для моего понимания CONNECTIVITY_CHANGE должно быть достаточно. Вы должны прочитать подробную информацию в dev doc.

Удалите эти две строки из манифеста:

<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

как реализовать его в коде? –

+0

Просто удалите фильтры намерения для двух других. – neofu

+0

Я не получаю :( –