15

これは私がやりたいことです:

=> WiFiが有効でアクティブな場合、インテントを起動します(実際には、コンテンツを取得するのはWebViewです=>ウェブ上の私のアプリの指示)

=> そうでない場合は、別のインテントを起動して、「Web ページが利用できません... http://www.mywebsite.comの Web ページが一時的にダウンしているか、動いた…」

最初は使おうと思った

if(wifi.isWifiEnabled())

ただし、Wifi 接続がアクティブかどうかはわかりません。ユーザーがスイッチをオンにしたことだけが表示されます。デバイスが接続されている場合と接続されていない場合があります... これは正しいですか?

それから私は使用しようとしました:

if (wifi.getConnectionInfo().getSSID()!= null)

しかし、接続が失われたり無効になったりしても文字列を返すことに気付きました...?

どうすればいいですか?

wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE);
Intent intent_instructions;

            if (wifi.getConnectionInfo().getSSID()!= null){
                Log.i("Hub", "WiFi is enabled AND active !");
                Log.i("Hub", "SSID = "+wifi.getConnectionInfo().getSSID());
                intent_instructions = new Intent(this, Instructions.class);
            }else{
                Log.i("Hub", "NO WiFi");
                intent_instructions = new Intent(this, Instructions_No_WiFi.class);
            }
            this.startActivity(intent_instructions);

インテントを起動する直前に、デバイスがインターネットに接続されているかどうかをテストするより一般的な方法はありますか? Wifi、3Gなどを介して...

よろしくお願いします。

4

5 に答える 5

21

次のコードを使用して、接続を確認できます。

private static boolean isConnected(Context context) {
    ConnectivityManager connectivityManager = (ConnectivityManager)
        context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = null;
    if (connectivityManager != null) {
        networkInfo =
            connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    }
    return networkInfo == null ? false : networkInfo.isConnected();
}

マニフェストに android.net.conn.CONNECTIVITY_CHANGE インテントを登録していることを確認してください。そうしないと、オンラインであるという通知を受け取ることはありません。

ここ数日間、この問題に苦労してきましたが、WIFI_STATE_CHANGED だけでなく、CONNECTIVITY_CHANGE を登録する必要があることに気付きました。

于 2011-07-01T23:04:19.707 に答える
5

次のように実行できます。

  @Override
  public void onReceive(Context context, Intent intent) {

  String action = intent.getAction();

        if(WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)){

         Log.d("WIFI", "WIFI has changed");
         int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, -1);
         Log.d("WIFI", "WIFI State = " + wifiState);
         setCurrentWifiState(wifiState);

         }  

Wifi の状態に応じて 0,1,2,3 が表示されるため、たとえば 2 が接続中である場合は、ドキュメントで残りを確認できます。

于 2010-02-17T14:11:05.013 に答える
2

BroadcastReceiver クラスで:

@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
    if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)){                
        boolean connected = intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false);
        if (connected){
            // start your service here
        }
    }                   
}

また、AndroidManifest.xml で、android.net.wifi.supplicant.CONNECTION_CHANGE ブロードキャスト インテントに登録してください。

<intent-filter >    
    <action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" />
</intent-filter>
于 2012-07-17T15:17:27.467 に答える
0

isConnected()完全に正常に動作しません。別のことを調べてください

final ConnectivityManager connMgr = (ConnectivityManager)
        this.getSystemService(Context.CONNECTIVITY_SERVICE);
final android.net.NetworkInfo wifi =
    connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

    final android.net.NetworkInfo mobile =
    connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

    if( wifi.isAvailable() && wifi.getDetailedState() == DetailedState.CONNECTED){
        Toast.makeText(this, "Wifi" , Toast.LENGTH_LONG).show();
    }
    else if( mobile.isAvailable() && mobile.getDetailedState() == DetailedState.CONNECTED ){
        Toast.makeText(this, "Mobile 3G " , Toast.LENGTH_LONG).show();
    }
    else
    {   
        Toast.makeText(this, "No Network " , Toast.LENGTH_LONG).show();
    }

このコードは、wifi または 3g を使用しているかどうかを確認します。wifi がオンになっているがネットに接続されていない場合、または 3g に信号の問題がある場合は、この詳細を検出します。DetailedStates

于 2012-12-07T18:26:11.643 に答える