0

起動時にインターネット接続に依存するアプリがあり、以下のコードでそれを検出できます。

ただし、電話がしばらくアイドル状態で、ロックを解除してアプリを起動すると、すぐに接続が見つからないため、アプリを再起動して成功させる必要があります。

スレッドで待機して、以下のコードを再試行しましたが、成功しませんでした。

どんなアイデアでも大歓迎です、ありがとう。

コード

    // check Network/Internet connection
    public boolean isOnline() {

    try {
        ConnectivityManager cm = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
        boolean haveConnectedWifi = false;
        boolean haveConnectedMobile = false;

        cm = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo[] netInfo = cm.getAllNetworkInfo();

        for (NetworkInfo ni : netInfo) {
            if (ni.getTypeName().equalsIgnoreCase("WIFI")) {
                if (ni.isConnected()) {
                    haveConnectedWifi = true;
                }
            }
            if (ni.getTypeName().equalsIgnoreCase("MOBILE")) {
                if (ni.isConnected()) {
                    haveConnectedMobile = true;
                }
            }
        }
        return haveConnectedWifi || haveConnectedMobile;
    } catch (Exception e) {
        Log.e(TAG, e.toString());
    }
    return false;
}
4

1 に答える 1

1

あなたのコードonResume()をあなたの活動の中に入れてください。そうすれば、アクティビティに戻るたびにチェックされます。

さらに、接続を確認するかどうかを知るフラグを追加し、onPause()アクティビティの でそのフラグを true に設定します。で false にリセットしますonResume()

何かのようなもの:

boolean check;

    protected void onCreate(Bundle blah) {
      super(blah);
      check = true;
      // whatever else
    }

    protected void onResume() {
      if(check) {
        isOnline();
        // Everything else

        check = false;
      }
      super.onResume();
    }

    protected void onPause() {
      check = true;
      super.onPause();
    }

編集onResume()このアクティビティが再開されない限り呼び出されないので、次を追加できます:

protected void onResume() {
  isOnline();
  // Everything else
  super.onResume();
}

理解を深めるために 、 Android 開発者サイトの次のフローチャートをご覧ください。ここに画像の説明を入力

于 2012-12-05T06:11:53.160 に答える