14

Androidエミュレーターでインターネット接続を確認するために多くの方法を試しました

  ConnectivityManager conMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);  

   NetworkInfo info= conMgr.getActiveNetworkInfo();  

         if(info != null || info.isConnected()) {  
              Log.v("NetworkInfo","Connected State");  
         }  
        else{  
            Log.v("NetworkInfo","Not Connected state");  
            Log.v("Reason",info.getReason());  
        } 

システムでインターネット接続を無効にしても、私のコードは接続状態を表示しているように見えるので、これが機能する可能性があると推測しました

 if ( conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED
        ||  conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED  ) {

      Log.v("Congr","Connection Present");

    }
    else if ( conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED
        ||  conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED) {

      Log.v("conMgr"," No Connection");

    } 

ただし、上記のコードでは、インターネット ケーブルを取り外しても「接続が存在します」と表示されます。.これを行う正しい方法を見つけるのを手伝ってください.マニフェスト ファイルに ACCESS_NETWORK_STATE と INTERNET のアクセス許可があります

4

2 に答える 2

38

1インターネット ケーブルの切断は関係ありません。F8 を使用して、エミュレーターでインターネットのオン/オフを切り替えます

2最初のコードでは、このロジックは間違っています。

if(info != null || info.isConnected()) {  
              Log.v("NetworkInfo","Connected State");  
         } 

そのはず:

if(info != null && info.isConnected()) {  
              Log.v("NetworkInfo","Connected State");  
         } 

|| を使用する場合 これが結果です: a) info が null の場合、info.isConnected() がクラッシュします b) info が null でない場合、常に Connected State が表示されます

ただし、それを修正しても、コードは完全には正しくありません ( 4を参照) 。

3 2 番目のコードでは、このロジックは間違っています。

 else if ( conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED
        ||  conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED) {

      Log.v("conMgr"," No Connection");

    } 

次のようにする必要があります。

 else {

      Log.v("conMgr"," No Connection");

    } 

なんで?CONNECTED と DISCONNECTED よりも多くの状態があるためです。

ただし、それを修正しても、コードは完全には正しくありません ( 4を参照) 。

4これは、エミュレーターとデバイスで動作します。

connected = (   conMgr.getActiveNetworkInfo() != null &&
            conMgr.getActiveNetworkInfo().isAvailable() &&
            conMgr.getActiveNetworkInfo().isConnected()   )

isAvailable の使用に注意してください - これがないと isConnected は、WIFI が無効になっているときに TRUE を返す可能性があります。

お役に立てれば!

于 2010-05-30T07:55:07.633 に答える
1

実際には、エミュレータがホスト PC 経由で Web に接続されているかどうかはわかりません。PC で実行し、PC のワイヤレスがオフになっている場合でも、エミュレーターがオンライン状態であると認識している限り、true を返します。エミュレーターが本当にオンラインであるかどうかを確実に判断できる唯一の方法は、ページをフェッチして、それが成功するかどうかを確認することです。

于 2012-01-25T17:28:00.490 に答える