2016-02-26 2 views
1
public class MainActivity extends AppCompatActivity { 
    Context context; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

    } 

    public void show(View v){ 
     if (hasActiveInternetConnection(context)){ 
      Toast.makeText(MainActivity.this, "Internet connection available", Toast.LENGTH_SHORT).show(); 
     }else{ 
      Toast.makeText(MainActivity.this, "Internet connection not available", Toast.LENGTH_SHORT).show(); 
     } 
    } 

    public boolean hasActiveInternetConnection(Context context) { 
     if (isNetworkAvailable(context)) { 

      new URLConnectTask().execute(); 


     } else { 
      // Log.d(LOG_TAG, "No network available!"); 
      Toast.makeText(MainActivity.this, "No network available!", Toast.LENGTH_SHORT).show(); 
     } 
     return false; 
    } 

    private class URLConnectTask extends AsyncTask<String, Void, String> { 
     @Override 
     protected String doInBackground(String... urls) { 

      // params comes from the execute() call: params[0] is the url. 
      try { 
       HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection()); 
       urlc.setRequestProperty("User-Agent", "Test"); 
       urlc.setRequestProperty("Connection", "close"); 
       urlc.setConnectTimeout(1500); 
       urlc.connect(); 
       String code = String.valueOf(urlc.getResponseCode() == 200); 
       return code; 
      } catch (IOException e) { 
       //Log.e(LOG_TAG, "Error checking internet connection", e); 
       //Toast.makeText(MainActivity.this, "Error checking internet connection", Toast.LENGTH_SHORT).show(); 
       return "Error checking internet connection"; 
      } 
     } 
    } 

    private boolean isNetworkAvailable(Context context) { 
     ConnectivityManager connectivityManager 
       = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
     return activeNetworkInfo != null; 
    } 
} 

Я использовал это post для проверки подключения к Интернету. Но поскольку они не используют asynctask, если я использую этот код, я получаю NetworkOnMainThreadException. Я попытался использовать asynctask, но теперь я получаю сообщение «Интернет-соединение недоступно». Я думаю, это потому, что asynctask не возвращает логическое значение true. Поэтому любая помощь была бы высоко оценена.Проверьте подключение к Интернету при нажатии кнопки

+1

вы должны добавить <>, внутри вашего, если условия (только после того, как новый URLConnectTask() Execute();. Линия). В противном случае по умолчанию он вернет false в соответствии с вашим кодом – kishorepatel

+0

Превосходный ответ. Благодарю. Это то, что я искал. @kishorepatel – Sammy

ответ

-1

Пожалуйста, проверьте и есть этот код в файле манифеста

<uses-permission android:name="android.permission.INTERNET" /> 

Try This

ConnectivityManager cm = (ConnectivityManager) 
     activity.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = cm.getActiveNetworkInfo(); 
    // if no network is available networkInfo will be null 
    // otherwise check if we are connected 
    if (networkInfo != null && networkInfo.isConnected()) { 
     return true; 
    } 
    return false; 
+0

Добавлены права доступа к сети Интернет и сети доступа. – Sammy

0

Попробуйте этот код

public class MainActivity extends AppCompatActivity { 
Context context; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

} 
} 
public void show(View v){ 
    if (isConnectingToInternet(context)){ 
    Toast.makeText(MainActivity.this, "Internet connection available", Toast.LENGTH_SHORT).show(); 
    new URLConnectTask().execute(); 
}else{ 
    Toast.makeText(MainActivity.this, "Internet connection not available", Toast.LENGTH_SHORT).show(); 
} 
} 

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

private class URLConnectTask extends AsyncTask<String, Void, String> { 
    @Override 
    protected String doInBackground(String... urls) { 

     // params comes from the execute() call: params[0] is the url. 
     try { 
      HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection()); 
      urlc.setRequestProperty("User-Agent", "Test"); 
      urlc.setRequestProperty("Connection", "close"); 
      urlc.setConnectTimeout(1500); 
      urlc.connect(); 
      String code = String.valueOf(urlc.getResponseCode() == 200); 
      return code; 
     } catch (IOException e) { 
      //Log.e(LOG_TAG, "Error checking internet connection", e); 
      //Toast.makeText(MainActivity.this, "Error checking internet connection", Toast.LENGTH_SHORT).show(); 
      return "Error checking internet connection"; 
     } 
    } 
    } 
} 
+0

Я использую HttpURLConnection, чтобы проверить, поддерживает ли WiFi активное интернет-соединение. Будет ли этот код делать то же самое? @Amit – Sammy

+0

@sam попробуйте мой код улучшения –

+0

Я получаю ошибку в контексте. Я не понимаю, как вы используете два контекста (контекст и _context) @Amit – Sammy

0

использование ниже метод для проверки онлайн

/***************** * Проверить isOnline ******************/

public static boolean isOnline(Context context) { 
     boolean result = false; 
     if (context != null) { 
      final ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
      if (cm != null) { 
       final NetworkInfo networkInfo = cm.getActiveNetworkInfo(); 
       if (networkInfo != null) { 
        result = networkInfo.isConnected(); 
       } 
      } 
     } 
     return result; 
    } 

убедитесь, что ваш манифест содержит это разрешения

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
0

Вы можете использовать этот класс:

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

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

}

0

попробуйте один раз,

Boolean isInternetPresent = false; 
isInternetPresent = findconn.isConnectingToInternet(); 
    if (isInternetPresent) { 
      new URLConnectTask().execute(); 
     } else { 
      // Log.d(LOG_TAG, "No network available!"); 
      Toast.makeText(MainActivity.this, "No network available!", Toast.LENGTH_SHORT).show(); 
     } 

    public boolean isConnectingToInternet(){ 
      ConnectivityManager connectivity = (ConnectivityManager)_context.getSystemService(Context.CONNECTIVITY_SERVICE); 

      NetworkInfo info=connectivity.getActiveNetworkInfo(); 
      if (info == null) { 
       return false; 
      } 
      else { 
       return info.isConnectedOrConnecting(); 
      } 
    } 

(или), если вы хотите, отдельных типов сетевого

ConnectivityManager connectivity = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetwork = connectivity.getActiveNetworkInfo(); 
      if (activeNetwork != null) { // connected to the internet 
       if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) { 
        // connected to wifi 
        Toast.makeText(context, activeNetwork.getTypeName(), Toast.LENGTH_SHORT).show(); 
       } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) { 
        // connected to the mobile provider's data plan 
        Toast.makeText(context, activeNetwork.getTypeName(), Toast.LENGTH_SHORT).show(); 
       } 
      } else { 
       // not connected to the internet 
      } 
0

Я написал пользовательский класс, который проверяет все возможные сети либо WIFI или мобильные данные. Попробуйте следующее:

public class NetworkManager { 

    /** 
    * Checking for all possible internet providers 
    * **/ 
    public static boolean isConnectingToInternet(Activity activity){ 

     ConnectivityManager connectivityManager = (ConnectivityManager) activity.getSystemService(Context.CONNECTIVITY_SERVICE); 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      Network[] networks = connectivityManager.getAllNetworks(); 
      NetworkInfo networkInfo; 
      for (Network mNetwork : networks) { 
       networkInfo = connectivityManager.getNetworkInfo(mNetwork); 
       if (networkInfo.getState().equals(NetworkInfo.State.CONNECTED)) { 
        return true; 
       } 
      } 
     }else { 
      if (connectivityManager != null) { 
       //noinspection deprecation 
       NetworkInfo[] info = connectivityManager.getAllNetworkInfo(); 
       if (info != null) { 
        for (NetworkInfo anInfo : info) { 
         if (anInfo.getState() == NetworkInfo.State.CONNECTED) { 
//       LOGD(TAG, "NETWORKNAME: " + anInfo.getTypeName()); 
          return true; 
         } 
        } 
       } 
      } 
     } 
     showInternetSettingsAlert(activity); 
     return false; 
    } 


    /** 
    * Display a dialog that user has no internet connection lauch Settings 
    * Options 
    * */ 
    public static void showInternetSettingsAlert(final Activity activity) { 

     activity.runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 

       AlertDialog.Builder alertDialog = new AlertDialog.Builder(activity, R.style.AppCompatAlertDialogStyle); 

       // Setting Dialog Title 
       alertDialog.setTitle("Internet Settings"); 

       alertDialog.setCancelable(false); 

       // Setting Dialog Message 
       alertDialog 
         .setMessage("Internet is not enabled. Do you want to go to settings menu?"); 

       // On pressing Settings button 
       alertDialog.setPositiveButton("Settings", 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int which) { 

           if(activity instanceof BaseFragmentActivity) 
            ((BaseFragmentActivity)activity).hideLoader(); 
           else if(activity instanceof BaseActivity) 
            ((BaseActivity)activity).hideLoader(); 
//      take user to turn Wifi screen 
//      activity.startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK)); 

//      take user to turn on mobile data screen 
           activity.startActivity(new Intent(Settings.ACTION_DATA_ROAMING_SETTINGS)); 


          } 
         }); 

       // on pressing cancel button 
       alertDialog.setNegativeButton("Cancel", 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int which) { 
           System.exit(0); 
           dialog.cancel(); 
          } 
         }); 
       // Showing Alert Message 
       alertDialog.show(); 
      } 
     }); 


    } 

} 

Если сеть недоступна, она перенаправляет пользователя на включение сети.

3

эта работа отлично вы можете использовать этот код

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

//add to permission <uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
Смежные вопросы