2

有効な WiFi 接続が存在するかどうかを確認するのは問題ありません。しかし、この WiFi 接続のみがネットワーク アクセスに使用されるようにするにはどうすればよいでしょうか?

次のシナリオを想定しています。

  • 有効な WiFi 接続が存在するかどうかを確認します (また、有効なインターネット接続も存在するかどうかを確認する場合もあります)。
  • 現在、この WiFi 接続は中断されています
  • ネットワーク経由でデータの送信を開始しましたが、最近 WiFi が切れたため、モバイル接続が使用されています

どうすればそれを回避できますか?

4

3 に答える 3

3

WiFi 接続が存在するかどうかを確認します。

ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

if (mWifi.isConnected()) {
    // Do whatever
}

Source、または次のコード スニペットを使用します。

private static final String DEBUG_TAG = "NetworkStatusExample";
...      
ConnectivityManager connMgr = (ConnectivityManager) 
        getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
boolean isWifiConn = networkInfo.isConnected();
networkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
boolean isMobileConn = networkInfo.isConnected();
Log.d(DEBUG_TAG, "Wifi connected: " + isWifiConn);
Log.d(DEBUG_TAG, "Mobile connected: " + isMobileConn);

リスナーを追加して、WiFi がまだ有効になっているかどうかを確認します。

public class NetworkReceiver extends BroadcastReceiver {   

@Override
public void onReceive(Context context, Intent intent) {
    ConnectivityManager conn =  (ConnectivityManager)
        context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = conn.getActiveNetworkInfo();

    // Checks the user prefs and the network connection. Based on the result, decides whether
    // to refresh the display or keep the current display.
    // If the userpref is Wi-Fi only, checks to see if the device has a Wi-Fi connection.
    if (WIFI.equals(sPref) && networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
        // If device has its Wi-Fi connection, sets refreshDisplay
        // to true. This causes the display to be refreshed when the user
        // returns to the app.
        refreshDisplay = true;
        Toast.makeText(context, R.string.wifi_connected, Toast.LENGTH_SHORT).show();

    // If the setting is ANY network and there is a network connection
    // (which by process of elimination would be mobile), sets refreshDisplay to true.
    } else if (ANY.equals(sPref) && networkInfo != null) {
        refreshDisplay = true;

    // Otherwise, the app can't download content--either because there is no network
    // connection (mobile or Wi-Fi), or because the pref setting is WIFI, and there 
    // is no Wi-Fi connection.
    // Sets refreshDisplay to false.
    } else {
        refreshDisplay = false;
        Toast.makeText(context, R.string.lost_connection, Toast.LENGTH_SHORT).show();
    }
}

詳細な解決策については、ネットワーク使用の管理をお読みください。

于 2012-12-10T18:25:08.217 に答える
0

この方法でwifiが中断されているかどうかを確認できますか?

ConnectivityManager networkManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = networkManager.getActiveNetworkInfo();
NetworkInfo wifi = networkManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (wifi.isAvailable() && wifi.isConnected()) {
     return true;
}else {
     return false;
}

ブロードキャストレシーバーをlstenに追加してネットワークを変更したり、このメソッドをonReceive()メソッドに追加して確認したりできます。ネットワークが変更された場合は、onReceive()で通知を受信し、必要に応じて処理できます。

于 2012-12-10T18:44:58.870 に答える
0

ネットワークの変更に合わせてブロードキャスト レシーバーを追加できます。そのため、Wi-Fi が中断されるたびに通知が届き、必要に応じて状況を処理できます。次のリンクで詳細を確認できますhttp://developer.android.com/training/basics/network-ops/managing.html

于 2012-12-10T18:27:47.817 に答える