2017-02-20 2 views
0

У меня есть следующий код для определения наличия интернет-соединения или нет. Но если у меня нет подключения к интернету, соединение с данными «ON» все равно работает. что я должен делать?Как обнаружить подключение к Интернету в студии android

ConnectivityManager cManager = (ConnectivityManager) getSystemService(this.CONNECTIVITY_SERVICE); 


    NetworkInfo ninfo = cManager.getActiveNetworkInfo(); 


    if(ninfo!=null && ninfo.isConnected()) 

    { 
     Toast.makeText(this, "Available",Toast.LENGTH_LONG).show(); 
    } 

    else 
    { 
     Toast.makeText(this, "Not Available",Toast.LENGTH_LONG).show(); 
    } 
+0

У вас есть '' разрешение ACCESS_NETWORK_STATE' INTERNET' и в манифесте? – Marat

+0

Вам действительно нужно сделать сетевой звонок, чтобы узнать, доступно ли подключение к Интернету. –

+0

Проверьте, какое соединение Android распознает: 'Toast.makeText (это,« Доступно: »+ ninfo.getTypeName(), Toast.LENGTH_LONG) .show();' –

ответ

0

Используйте этот NetworkUtils класс:

import android.content.Context; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 

public class NetworkUtils { 

    private static int TYPE_WIFI = 1; 
    private static int TYPE_MOBILE = 2; 
    private static int TYPE_NOT_CONNECTED = 0; 

    public static int getConnectivityStatus(Context context) { 
    ConnectivityManager connectivityManager = (ConnectivityManager) context 
     .getSystemService(Context.CONNECTIVITY_SERVICE); 

    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); 

    if (networkInfo != null) { 
     if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI 
      && networkInfo.getState() == NetworkInfo.State.CONNECTED) { 

     return TYPE_WIFI; 

     } else if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE 
      && networkInfo.getState() == NetworkInfo.State.CONNECTED) { 
     return TYPE_MOBILE; 
     } 
    } 
    return TYPE_NOT_CONNECTED; 
    } 

    public static boolean isNetworkConnected(Context context) { 
    int networkStatus = getConnectivityStatus(context); 
    if (networkStatus == TYPE_WIFI || networkStatus == TYPE_MOBILE) { 
     return true; 
    } else { 
     return false; 
    } 
    } 
} 

Использование так:

if(NetworkUtils.isNetworkConnected(this)){ 

} 
0

использовать ConnectivityManager класс. здесь есть класс Java:

ConnectivityManager manager =(ConnectivityManager) getApplicationContext() 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo activeNetwork = manager.getActiveNetworkInfo(); 
     if (null != activeNetwork) { 
      if(activeNetwork.getType() == ConnectivityManager.TYPE_WIFI){ 
       //we have WIFI 
      } 
      if(activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE){ 
       //we have cellular data 
      } 
     } else{ 
      //we have no connection :(
     } 

не забудьте спросить разрешения в AndroidManifest.xml:

<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"/> 
Смежные вопросы