2

特定のURLにWebビューを表示するAndroidアプリを実行しています。アクセスしているアプリケーションサーバーが稼働していて、HTMLを表示できるかどうかを確認したいのですが、失敗した場合はWebビューを終了する必要があります。このチェックは10回ごとに行う必要があります。秒(または何でも)、これのための最良のアプローチは何ですか?

4

3 に答える 3

2

タイマーを作成し(ここに情報があります)、タイマーが鳴ったら、任意のホストに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 を返す場合: 接続はアクティブです。それ以外はアクティブではありません。

于 2013-01-06T13:50:19.873 に答える
1

Using-BroadCastReceiver-Way-It's 効率的な実装と現実的

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);

接続に変更がある場合、つまりデータ接続が接続されているか切断されている場合はいつでも、このイベントをブロードキャストとして受信します。したがって、ブロードキャスト レシーバーの onreceive で、インターネット接続の接続を確認し、インターネットがアップまたはダウンしているかどうかを判断してください。

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

どこかでお役に立てれば幸いです!!

于 2013-01-06T14:10:44.563 に答える
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);
于 2013-01-06T13:52:03.477 に答える