以下のシナリオで一般的なインターネット接続を確認するために、アプリケーションで実行されるバックグラウンド タスクはありますか?
1.サーバーからのデータの解析/フェッチの開始
2.サーバーからの解析/フェッチの合間に
サンプル コードやリンクは非常に役に立ちます。
以下のシナリオで一般的なインターネット接続を確認するために、アプリケーションで実行されるバックグラウンド タスクはありますか?
1.サーバーからのデータの解析/フェッチの開始
2.サーバーからの解析/フェッチの合間に
サンプル コードやリンクは非常に役に立ちます。
両方のタスクにサービスを使用できます。
最初のものでは、ダウンロードが開始されるときにサービスを呼び出します。
しばらくしてから実行されるサービスのスレッドを使用して、アクティブなインターネット接続を確認します。
編集-
それは次のようなものかもしれません、
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 TaskとAlarm Managerも見てください。
IntentService
orを開始して、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" />
以下のユーティリティ クラスを使用して、マニフェストでインターネット アクセス許可を付与してください。
問題があればお知らせください。
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;
}