是否有任何后台任务在应用程序中运行以检查以下情况下的互联网连接是否常见?
1.开始从服务器解析/获取数据
2.在解析/从服务器获取之间
任何示例代码或链接都对我有很大帮助。
答案 0 :(得分: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();
还要查看此post。
此外,我还找到了另外两个选项,
查看计时器任务和警报管理器也可以在一段时间后检查互联网连接。
答案 1 :(得分:0)
您可以开始IntentService
或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" />
答案 2 :(得分: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;
}