3

私はよく調べて、これについて見たさまざまな答えを試しましたが、私の場合はどれもうまくいかないようです。私は堅牢なソリューションを探しているので、それ以上の苦労はありません。

一部のタスクを実行するために、アプリがインターネット接続のないWi-Fiネットワーク(ローカルネットワーク)に接続する必要があるという珍しいケースがあります。これが完了すると、接続を切断して、モバイルの代替ネットワークに再接続する必要があります。または、通信ができるようにインターネットに接続できる代替のWi-Fiホットスポット。

私が抱えている問題は、通信キューが通信を開始しようとしているときに、実際にインターネットへのルートがあることを確認する必要があることです(接続の変更によってトリガーされます)

私はConnectivityManagerで次のようなさまざまな呼び出しを試しました。

isConnected();
isAvailable();

しかし、インターネットに対応していないネットワークに接続している場合でも、これらはtrueを返します。

インターネットに対応していないネットワーク(または、登録およびログインしていない場合など、BT Openzoneなどのインターネットに対応していない他のネットワーク)に接続したときに、ルートがないことを確認する方法が必要です。インターネットに接続し、ルートがある場合は、trueを返すことができます。

私が考えた可能性の1つは、pingでしたが、可能であれば、少しすっきりしたものを選びます。

requestRouteToHost()を試しましたが、期待どおりに機能せず、実際には接続を変更しようとしますが、これは私が望んでいることではありません。

ありがとう

4

3 に答える 3

2

INTENT インターネット接続の確認から

<receiver android:name=".YOURRECEIVER">
   <intent-filter>
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
   </intent-filter>
</receiver>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />


public class NetworkStateReceiver extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent) {
     super.onReceive(context, intent);
     Log.d("app","Network connectivity change");
     if(intent.getExtras()!=null) {
        NetworkInfo ni=(NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO);
        if(ni!=null && ni.getState()==NetworkInfo.State.CONNECTED) {
            Log.i("app","Network "+ni.getTypeName()+" connected");
        }
     }
     if(intent.getExtras().getBoolean(ConnectivityManager.EXTRA_NO_CONNECTIVITY,Boolean.FALSE)) {
            XLog.d("app","There's no network connectivity");
     }
   }
}
于 2012-06-08T12:36:43.207 に答える
1

私が使用する方法は次のとおりです。

public static boolean isNetworkAvailable(final Context context)  {
    return ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo() != null;
}

メソッドの使用方法は次のとおりです。

if (isNetworkAvailable(context)) {
    // code here
} else {
    // code
}
于 2013-04-20T20:37:10.103 に答える