0

特定のWIFIネットワークに接続するAndroidアプリを書いています。トリッキーな部分は、ユーザーが手動で他のネットワークに接続したり、WIFIをオフにしたり、接続が失われたりした場合(ユーザーが離れたため)...このネットワーク(removeNetwork)を忘れる必要があることです。

私の質問は次のとおりです。これを達成するにはどうすればよいですか?

  • バックグラウンドで実行されるサービスを作成し、5分ごとにWIFIのステータスを確認する必要がありますか?
  • WIFIが特定のステータスに変更されたときに、クラス、メソッド、関数を実行するための「フック」メソッドはありますか?
  • この問題を解決するための最良の方法は何ですか?

本当にありがとう!

4

2 に答える 2

2

ネットワークまたはwifi接続に変更があった場合はいつでもアクティブ化できるブロードキャストレシーバーをアプリケーションに実装することをお勧めします。そのブロードキャストレシーバーのonRecieve()メソッドでは、接続が失われたときにあらゆる種類の処理を実行できます。 。

これはあなたのマニフェストになります

<receiver android:name=".WifiReceiver" >
    <intent-filter>
       <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
    </intent-filter>
</receiver> 

これはJavaコードです。public class WifiReceiver extends BroadcastReceiver {private final String TAG = "WifiReceiver";

@Override
public void onReceive(Context context, Intent intent) {
    int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN);
    String wifiStateText = "No State";

    switch (wifiState) {
    case WifiManager.WIFI_STATE_DISABLING:
        wifiStateText = "WIFI_STATE_DISABLING";
        break;
    case WifiManager.WIFI_STATE_DISABLED:
        wifiStateText = "WIFI_STATE_DISABLED";
        break;
    case WifiManager.WIFI_STATE_ENABLING:
        wifiStateText = "WIFI_STATE_ENABLING";
        break;
    case WifiManager.WIFI_STATE_ENABLED:
        wifiStateText = "WIFI_STATE_ENABLED";
        break;
    case WifiManager.WIFI_STATE_UNKNOWN:
        wifiStateText = "WIFI_STATE_UNKNOWN";
        break;
    default:
        break;
    }
    MyLog.d(TAG, "onReceive Broadcast > WiFiState: " + wifiStateText);
    MyLog.d(TAG, "onReceive Broadcast > Time: " + new Date());
}

}そして次の許可を追加することを忘れないでください

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
于 2013-03-09T16:39:20.027 に答える
1

ネットワーク状態が変化したときに呼び出される BroadcastReriever の作成に関する次の投稿を参照してください。

インターネット リスナー Android の例

ネットワーク リスナー Android

于 2013-03-09T16:36:56.960 に答える