我正在运行一个Android应用程序,显示特定URL的webview,我想检查我正在访问的应用程序服务器是否存活并且我可以查看HTML,如果失败我应该终止webview,这个检查应该每10秒钟(或其他什么),最好的方法是什么?
答案 0 :(得分:2)
创建计时器(here you have information),当计时器打勾时,ping任何主机:
URL url = new URL("http://microsoft.com");
HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
urlc.setRequestProperty("User-Agent", "Android Application:"+Z.APP_VERSION);
urlc.setRequestProperty("Connection", "close");
urlc.setConnectTimeout(1000 * 30); // mTimeout is in seconds
urlc.connect();
if (urlc.getResponseCode() == 200) {
Main.Log("getResponseCode == 200");
return new Boolean(true);
}
} catch (MalformedURLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
如果返回true:连接处于活动状态。其他不活跃。
答案 1 :(得分:1)
最好的方法是使用AsyncTask,这样您的应用就不会冻结。
private class checkServer extends AsyncTask<Integer, Integer, Void> {
@Override
protected Void doInBackground(Integer... params) {
questionRunning = true;
//check if server is running
//now wait 10.000ms (10sec)
try {
Thread.sleep(params[0]);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
// Update your layout here
super.onPostExecute(result);
//Do it again!
new checkServer().execute(10000);
}
@Override
protected void onProgressUpdate(Integer... progress) {
}
}
如何调用您的AsynTask:
new checkServer().execute(10000);
答案 2 :(得分:1)
使用-BroadCastReceiver-Way-It高效实施&amp;逼真
As you're saying that you need to check the specific server for alive() or not?. Then it depends upon your choice. But always try to be general.
要接收互联网连接掉线/上线,请收听 'ConnectivityManager.CONNECTIVITY_ACTION'动作。
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
getApplicationContext().registerReceiver(mNetworkStateIntentReceiver, filter);
每当连接发生变化时,即数据连接可能已连接或断开连接,您将收到此事件作为广播,因此在收到广播接收器时,请检查是否有互联网连接,并决定是否上网是上升还是下降。
BroadcastReceiver mNetworkStateIntentReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION))
{
NetworkInfo info = intent.getParcelableExtra(
ConnectivityManager.EXTRA_NETWORK_INFO);
String typeName = info.getTypeName();
String subtypeName = info.getSubtypeName();
System.out.println("Network is up ******** "+typeName+":::"+subtypeName);
if( checkInternetConnection()== true )
{
"Decide your code logic here...."
}
}
}
}
private boolean checkInternetConnection()
{
ConnectivityManager conMgr = (ConnectivityManager) mContext.getSystemService(mContext.CONNECTIVITY_SERVICE);
// ARE WE CONNECTED TO THE NET
if (conMgr.getActiveNetworkInfo() != null && conMgr.getActiveNetworkInfo().isAvailable() &&conMgr.getActiveNetworkInfo().isConnected())
{
return true;
}
else
{
return false;
}
}
希望它可以帮到你某个地方!!