1

私は2つの開発デバイスを持っています。1つはAndroid2.2電話で、もう1つはNexus7タブレット(電話なし)です。どちらもwifiがあります。以下のコードが2.2phoneで実行されると、Wifiまたはモバイルデータがオンで機能しているかどうかが検出されます。Nexus7タブレットに同じコードを入力すると、Wi-Fiがオンになっているのにインターネット接続がないことが返されます。両方のデバイスで動作させるにはどうすればよいですか?

   public boolean isOnline()
   {
ConnectivityManager connMgr =  (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
    return (networkInfo != null && networkInfo.isConnected());
   }  
4

3 に答える 3

2

isConnected は、ルーターへの WIFI 接続が確立されると true を返します。両方のデバイスで接続がまったく同じように設定されていますか?

isConnectedOrConnecting() を試すこともできますが、ISP への接続がまだ確立されていないが、確立中の場合でも true を返すことを除いて、ほとんど同じです。

また、接続を確認できるように、ジェリー Bean のアクセス許可の一部が変更されている可能性があるかどうかも確認してください。

それ以外には、この方法がデバイスごとに異なる動作をする理由はありません。

于 2012-07-23T14:16:17.037 に答える
1

にいくつかのバグがあるようConnectivityManagerです。まだ修正されていない、文書化されたバグのようです。

http://code.google.com/p/android/issues/detail?id=11891

それ以外の場合は、今年初めに、ネットワークの変更をリッスンするアプリに取り組みました。を試すとnetworkInfo.getTypeName()、「WIFI」または「null」が返されます (データ ネットワークの場合は「MOBILE」も返されます)。この状態から抜け出すことができます。私は今年初めに放送受信機がネットワークの変化を監視するためにその回線を使用し、2.2 から 4.0.4 まで動作しました (4.1 ではまだテストしていません)。

于 2012-07-23T14:35:18.013 に答える
1

問題は別の場所にあることが判明しました。上記のコードは機能していましたが、Java エラーが発生し、HEAD に書き込めませんでした。必要ないのでコメントアウトしました。このコードは、2.2 ではエラーをスローせずに問題なく動作しましたが、4.1 では JAVA エラーをスローします。テストするデバイスがあることをうれしく思います。エミュレーターはこれをキャッチできなかったでしょう。2.2用にコンパイルされました。わお。

   File root = Environment.getExternalStorageDirectory();
   URL u = new URL(url);
   HttpURLConnection c = (HttpURLConnection) u.openConnection();
   c.setRequestMethod("HEAD");
// c.setDoOutput(true);   //<<< Allowed on 2.2 Not on 4.1
   c.connect();
   InputStream in = c.getInputStream();
   long dt=c.getLastModified();
于 2012-07-23T16:40:55.507 に答える