2012-01-25 1 views
1

Я разработал одно приложение, в котором я должен проверить, подключена ли сеть или нет, я использую следующий код, но не работает. может ли кто-нибудь решить мою проблему. мой кодКак я могу проверить сетевое соединение в Android?

public class AbcActivity extends Activity { 
    Button b; 
    private static final String tag = null; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     b=(Button)findViewById(R.id.button1); 
     b.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       netCheckin(); 
      } 
     }); 
    } 
     private void netCheckin() { 

      try { 

       ConnectivityManager nInfo = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
       nInfo.getActiveNetworkInfo().isConnectedOrConnecting(); 

       Log.d(tag, "Net avail:" 
         + nInfo.getActiveNetworkInfo().isConnectedOrConnecting()); 

       ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
       NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
       if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
        Toast.makeText(getApplicationContext(), "net on", Toast.LENGTH_LONG).show(); 
        Log.d(tag, "Network available:true"); 

       } else { 
        Toast.makeText(getApplicationContext(), "net OFF", Toast.LENGTH_LONG).show(); 
        Log.d(tag, "Network available:false"); 

       } 

      } catch (Exception e) { 
       Log.e("error",""+e); 
      } 
     } 

    } 

я есть дать андроид: имя = «android.permission.ACCESS_NETWORK_STATE»/> в моем файле манифеста в коде выше моя проблема, когда сетка включить или отключить это дает такой же результат, как «net on» (сообщение тоста).

+0

http://stackoverflow.com/questions/9000169/android-contentprovider-check-network-access – waqaslam

ответ

1

В верхней части OnCreate метод, используйте

if(!checkInternetConnection()){ 
      // network connnectivity error , show some dialog here and exit from the app 

     } 

где

private boolean checkInternetConnection() { 

      ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
      // ARE WE CONNECTED TO THE NET 
      if (conMgr.getActiveNetworkInfo() != null 
        && conMgr.getActiveNetworkInfo().isAvailable() 
        && conMgr.getActiveNetworkInfo().isConnected()) { 

       return true; 

      } else { 
       Log.v("", "Internet Connection Not Present"); 
       return false; 
      } 
     } 

Надеется, что это поможет вам Виль.

+0

У меня есть этот, но когда я отключен, net net else не вызывается вместо этого, если блок вызывает. – NareshRavva

+0

, когда сеть отключена, Очевидно, что блок if будет выполнен .... какая проблема в этом? –

1

Я сделал это в своем приложении. Для того чтобы действительно проверить подключения к сети, попробуйте пинг или DNS решимостью www.google.com:

  • Если пинг успешно, то у вас есть подключение к Интернету
  • Если нет, то вы не есть подключение к сети Интернета

@Waqas, этот вопрос не имеет дела с ситуацией , подключенной к маршрутизатору, но не имеет доступа в Интернете потому что ConnectivityManager не делает различия между сетью и интерном t.

1

Просто попробуйте приведенный ниже код, чтобы вы могли проверить, подключен ли интернет или нет. Этот код работает для меня. Также вы можете проверить, подключен ли интернет через мобильный телефон, а затем он находится в роуминге или нет.

int typeOfConnection = 0; 
    //Gets the system service of the connectivity. 
    ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo[] netInfo = connectivityManager.getAllNetworkInfo(); 

    //Checks whether the connectivity type is WIFI or MOBILE. 
    for (NetworkInfo networkInfo : netInfo) 
    { 
     if (networkInfo.getTypeName().equalsIgnoreCase("WIFI")) 
      if (networkInfo.isConnected()){ 
            typeOfConnection = 1; 
       Toast.makeText(getApplicationContext(), "net on", Toast.LENGTH_LONG).show(); 

      } 
     if (networkInfo.getTypeName().equalsIgnoreCase("MOBILE")) 
      if (networkInfo.isConnected()){ 
            typeOfConnection = 2; 
       Toast.makeText(getApplicationContext(), "net on", Toast.LENGTH_LONG).show(); 

      } 
    } 

    TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
    if(typeOfConnection== 2 && telephonyManager.isNetworkRoaming()){ 
     typeOfConnection = 3; 
    } 

    if(typeOfConnection == 0){ 
       Toast.makeText(getApplicationContext(), "net OFF", Toast.LENGTH_LONG).show(); 

    } 

Все лучшее

+0

Этот код должен выполнять задачу, охватывает все состояния, и я также использую то же самое – akkilis

1
// check internet connectivity 
public static boolean isNetworkAvailable(Context context) { 

    boolean networkStatus; 
    try { 

     ConnectivityManager connectivityManager = (ConnectivityManager) context 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetworkInfo = connectivityManager 
       .getActiveNetworkInfo(); 

     networkStatus = (activeNetworkInfo != null && activeNetworkInfo.isConnected()) ? true : false; 

    } catch (Exception e) { 

     e.printStackTrace(); 
     DinotaLogger.log(e, Level.SEVERE); 
     networkStatus = false; 

    } 

    return networkStatus; 
} 

Обязательно укажите файл манифеста. Если вы используете эмулятор для проверки этого, нажмите F8, чтобы отключить доступ к сети. Это отлично работает с эмулятором Android 2.3.3.

 Смежные вопросы

  • Нет связанных вопросов^_^