1

以下のシナリオで一般的なインターネット接続を確認するために、アプリケーションで実行されるバックグラウンド タスクはありますか?

1.サーバーからのデータの解析/フェッチの開始

2.サーバーからの解析/フェッチの合間に

サンプル コードやリンクは非常に役に立ちます。

4

3 に答える 3

0

両方のタスクにサービスを使用できます。

  • 最初のものでは、ダウンロードが開始されるときにサービスを呼び出します。

  • しばらくしてから実行されるサービスのスレッドを使用して、アクティブなインターネット接続を確認します。

編集-

それは次のようなものかもしれません、

Thread thread = new Thread()
{
      @Override
      public void run() {
          try {
              while(true) {
                  sleep(1000);
                  Toast.makeText(getBaseContext(), "Running Thread...", Toast.LENGTH_LONG).show();
                  // Check internet connectivity here
              }
          } catch (InterruptedException e) {
           Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG).show();
          }
      }
  };

thread.start();

こちらの投稿もご覧ください。

また、他に2つのオプションを見つけました。

しばらくしてからインターネット接続を確認するために、Timer TaskAlarm Managerも見てください。

于 2013-01-16T12:57:41.993 に答える
0

IntentServiceorを開始して、Serviceこれを使用できます。

public boolean CheckInternet() 
    {
        ConnectivityManager connec = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        android.net.NetworkInfo wifi = connec.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        android.net.NetworkInfo mobile = connec.getNetworkInfo(ConnectivityManager.

        if (wifi.isConnected()) {
            return true;
        } else if (mobile.isConnected()) {
            return true;
        }
        return false;
    }

AndroidManifestまた、このアクセス許可をファイルに追加することを忘れないでください。

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
于 2013-01-16T13:00:13.847 に答える
0

以下のユーティリティ クラスを使用して、マニフェストでインターネット アクセス許可を付与してください。

問題があればお知らせください。

private static NetworkUtil mInstance;
private volatile boolean mIsOnline;

private NetworkUtil() {
    ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
    exec.scheduleAtFixedRate(new Runnable() {
        @Override
        public void run() {
            boolean reachable = false;
            try {
                Process process = java.lang.Runtime.getRuntime().exec("ping -c 1 www.google.com");
                int returnVal = process.waitFor();
                reachable = (returnVal==0);
            } catch (Exception e) {
                e.printStackTrace();
            }
            mIsOnline = reachable;
        }
    }, 0, 5, TimeUnit.SECONDS);
}

public static NetworkUtil getInstance() {
    if (mInstance == null) {
        synchronized (NetworkUtil.class) {
            if (mInstance == null) {
                mInstance = new NetworkUtil();
            }
        }
    }
    return mInstance;
}

public boolean isOnline() {
    return mIsOnline;
}
于 2017-02-14T15:16:12.363 に答える