ANDROID:WiFiが有効でアクティブな場合、インテントを起動します
-
06-07-2019 - |
質問
これが私がやりたいことです:
=> WiFiが有効でアクティブな場合、インテントを起動します(実際には、コンテンツを取得するのはWebViewで、ウェブ上のアプリの指示です)
=>そうでない場合は、別のインテントを起動して、" Webページが利用できないWebViewを表示しないようにします... http://www.mywebsite.com は一時的にダウンしているか、移動した可能性があります..."
最初に使用することを考えました
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などを通じて...
ご協力いただきありがとうございます。
解決
次のコードを使用して接続を確認できます:
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を登録する必要があることに気付きました。
他のヒント
android.net.ConnectivityManager.getActiveNetworkInfo()
を試してください: null
が返される場合、接続はありません。 NetworkInfo
オブジェクトを返す場合、 NetworkInfo.getState()
を使用して接続の状態を確認できます。また、 NetworkInfo.State.CONNECTED
の場合は、あなたは接続されていますが、そうでなければ接続されていません。
次のように実行できます。
@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が接続している場合は、ドキュメントで残りを確認できます
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>
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