2017-11-01 31 views
0

インターネット接続の問題、私は以下の方法でインターネット接続をチェックしています私のアプリで

public static boolean isOnline(Context context) { 
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
    if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
     return true; 
    } 
    return false; 
} 

今、活動中に私は以下のように、インターネット接続をチェックしています:

if (Constant.isOnline(mContext)) 
    loadNotificationList(); 
else 
    Constant.displayToast(mContext, getResources().getString(R.string.msg_internet)); 

さて、もしMobileDataかwi-fiはオフです。私はトーストメッセージを受け取っています。大丈夫だよ。 問題は以下のシナリオにあります:

==>ホットスポットがオンで、デバイスが接続されている別のデバイスのwi-fiを使用しています。今、私はその別のデバイスのモバイルデータをオフにしました。 これは、私のインターネットアクセスがないことを意味します。 しかし、まだ私は、メソッドからを取得しています:isOnline()

をので、私はこの方法が唯一の状態をチェックしていると思います。インターネットアクセスが実際に利用可能であるかどうかチェックしたいのですが?

ありがとうございました。

+0

Wi-Fi接続があるかどうかだけを確認しています。そしてあなたはそれがまだインターネット接続ではないことを発見したので。 – greenapps

答えて

0

MobileDataかのWi-Fiがオフの場合、私は

if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
     return true; 
    } 

問題

  • あなたreturnタイプトーストメッセージを取得しています
ネットワークのための方法以下は、この方法を試してみてください

public static boolean isOnline(Context context) 
     { 
     ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
      if (netInfo == null) 
       return false; 
      if (!netInfo.isConnected()) 
       return false; 
      if (!netInfo.isAvailable()) 
       return false; 
     return true; 
     } 
+1

条件(if(netInfo!= null && netInfo.isConnected())がtrueを返します。そうでない場合はfalseを返します。この回答には十分です。 –

+0

@NileshRathod thanks.Move ahead。 –

+0

あなたはすべて私の要点を得ていません。私はすでにこれらのものをやっている。質問をもう一度読む。 –

0

が利用可能かどうかです。

public static boolean isNetworkAvailable(Context mContext) { 

    ConnectivityManager cm = (ConnectivityManager) mContext 
      .getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = cm.getActiveNetworkInfo(); 
    if (networkInfo != null && networkInfo.isConnected()) { 
     Log.e("Network Testing", "***Available***"); 
     return true; 
    } 
    Log.e("Network Testing", "***Not Available***"); 
    return false; 
} 

インターネット接続のアクティビティチェックで。

if(Utils.isNetworkAvailable(mContext)){ 

     isInternetAvailable = true; 

    }else{ 
     isInternetAvailable = false; 
    } 
1

私は私のプロジェクトに以下のアプローチを使用しました。私はクラスCheckInternetを作った。アイデアは、あなたがどこかを経由して、このクラスを呼び出すもしそうなら、あなたはisNetworkAvailable()を使用してネットワークに接続している場合hasActiveInternetConnection()

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

import java.io.IOException; 
import java.net.HttpURLConnection; 
import java.net.URL; 

public class CheckInternet { 

    private static final String TAG = CheckInternet.class.getSimpleName(); 
    protected Context context; 

    public CheckInternet(Context context) { 
     this.context = context; 
    } 

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

    public static boolean hasActiveInternetConnection(Context context) { 
     if (isNetworkAvailable(context)) { 
      try { 
       HttpURLConnection urlc = (HttpURLConnection) (new URL("http://clients3.google.com/generate_204").openConnection()); 
       urlc.setRequestProperty("User-Agent", "Test"); 
       urlc.setRequestProperty("Connection", "close"); 
       urlc.setConnectTimeout(1500); 
       urlc.connect(); 

       return (urlc.getResponseCode() == 204 && urlc.getContentLength() == 0); 
      } catch (IOException e) { 
       Log.e(TAG, "Error checking Internet Connection - " + e); 
      } 
     } else { 
      Log.d(TAG, "No network available!"); 
     } 
     return false; 
    } 
} 

に(望ましいグーグル)、サーバーをpingを実行し、応答を確認することで、インターネット接続のチェック、確認することですスレッドを直接呼び出すと、NetworkOnMainThreadExceptionがスローされます。以下は私がフラグメントでそれをどのように呼び出すかです。

Thread th = new Thread(new Runnable() { 
    public void run() { 
     Boolean b = CheckInternet.hasActiveInternetConnection(getContext()); 

     if (b) { 
      //Net is working, do whatever 
     } else { 
      //Net is NOT working 
     } 
    } 
}); 
th.start(); 
関連する問題