【发布时间】:2013-01-16 12:52:33
【问题描述】:
是否有任何后台任务在应用程序中运行,以检查以下常见场景的互联网连接?
1.开始从服务器解析/获取数据
2.在从服务器解析/获取之间
任何示例代码或链接对我都有很大帮助。
【问题讨论】:
-
是的,哪个最适合类似服务,或者可能是接收者,我的代码仅适用于第一种情况
标签: android connection android-internet
是否有任何后台任务在应用程序中运行,以检查以下常见场景的互联网连接?
1.开始从服务器解析/获取数据
2.在从服务器解析/获取之间
任何示例代码或链接对我都有很大帮助。
【问题讨论】:
标签: android connection android-internet
您可以启动 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" />
【讨论】:
您可以为这两项任务使用服务。
对于第一个,在下载开始时调用服务。
在服务中使用一个线程,该线程会在一段时间后执行,以检查活动的 Internet 连接。
编辑-
可能是这样的,
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。
我还发现了另外两个选项,
看看Timer Task和Alarm Manager也可以在一段时间后检查互联网连接。
【讨论】:
您可以使用以下实用程序类 确保在清单中授予互联网权限。
如果有任何问题,请告诉我。
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;
}
【讨论】: