Android定期检查互联网连接

时间:2013-01-06 13:43:26

标签: android webview connectivity

我正在运行一个Android应用程序,显示特定URL的webview,我想检查我正在访问的应用程序服务器是否存活并且我可以查看HTML,如果失败我应该终止webview,这个检查应该每10秒钟(或其他什么),最好的方法是什么?

3 个答案:

答案 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;  
  }    
}

希望它可以帮到你某个地方!!