7

私のアプリは最初にインターネットからデータをロードします(私はウェブサービスを使用しています)。アプリの起動時にインターネットアクセスを確認したいです。

  1. 3G、WIFI、GPRS、またはその他の形式のインターネットが利用可能かどうかを確認したいと思います。
  2. 利用できない場合は、「インターネット アクセスが必要です」などのメッセージをユーザーに表示し、アプリを終了します。(現在、インターネットにアクセスできない場合、アプリで強制終了エラーが発生しています)
  3. 利用可能な場合は、アプリを通常どおり起動します。
  4. また、私のアプリはさまざまな段階で Web サービスからデータをフェッチします。各段階または操作の前に、最初にインターネット アクセスを確認します。

これを行うにはどうすればよいですか?

4

3 に答える 3

7

私の方法を使用できます:

public static boolean isNetworkAvailable(Context context) 
{
    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++) 
            {
                Log.i("Class", info[i].getState().toString());
                if (info[i].getState() == NetworkInfo.State.CONNECTED) 
                {
                    return true;
                }
            }
        }
    }
    return false;
}
于 2012-04-18T04:54:01.987 に答える
3

これはすべて、を使用して実行できますConnectivityManager。必要な情報はすべてここにあります

http://developer.android.com/reference/android/net/ConnectivityManager.html

おそらく、最初のアクティビティの方法にこのようなものを貼り付けたいと思うでしょうonStart()(コードのどこで接続が起動され、データがダウンロードされるかによって異なります)

ConnectivityManager cm =  (ConnectivityManager) Context.getSystemService(Context.CONNECTIVITY_SERVICE);

if (cm.getAllNetworkInfo().isConnected()) {
 //proceed with loading 
} else { 
//showErrorDialog 
}

私はコードをテストしていないので、カットアンドペーストはおそらく悪い考えですが、これはあなたに良い出発点を与えるはずです。ドキュメントを確認すると、他にもたくさんの情報があります。

また、コードを変更して接続の欠如を処理し、接続がない場合にクラッシュしないようにすることも考えられます。おそらく、デフォルトのロード画面が表示されますか?また、利用可能な接続がある場合でもアプリがデータを取得できない可能性があるため、そのシナリオも処理する必要があります。

于 2012-04-17T15:54:16.447 に答える
1
NetworkInfo i = conMgr.getActiveNetworkInfo();
  if (i == null)
    return false;
  if (!i.isConnected())
    return false;
  if (!i.isAvailable())
    return false;
  return true;
于 2012-04-18T05:58:16.920 に答える