現在、Android アプリでバックグラウンド IntentService を使用してサーバーに接続し、データを取得して、接続が利用可能な場合にのみアプリを更新しています。デバイスがモバイル ネットワーク データまたは認証された Wi-Fi 接続またはオープン Wi-Fi 接続に接続されている場合、完全に機能します。
この問題は、デバイスがモバイル データ ネットワークにアクセスできず、認証が必要な Wifi ソースに接続されていて、接続がまだ認証されていない場合に発生します。認証されていない接続を介してデータを転送できないため、サービス フォースは終了します。
サーバーに接続してバックグラウンド タスクを実行するためのエントリ ポイントに対する私のチェックは、以下のチェックです。
ConnectivityManager conMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
if((conMgr.getActiveNetworkInfo() != null &&
conMgr.getActiveNetworkInfo().isAvailable() &&
conMgr.getActiveNetworkInfo().isConnected()) || WifiConnected() == true){
// バックグラウンド処理を行う }
WifiConnected() メソッドは次のようになります。
private boolean WifiConnected() {
ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
SupplicantState supState;
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
supState = wifiInfo.getSupplicantState();
return (networkInfo != null && networkInfo.isConnected() && supState.toString().contentEquals("COMPLETED"));
}
基本的に、バックグラウンド タスクを実行する前に確認しているのは、デバイスにアクティブなネットワーク接続があり、接続されているかどうか、または接続が Wi-Fi であるかどうか、その接続が認証完了でデータ転送が可能であるかどうかです。
これは機能していないようで、失敗してもサービスが強制的に閉じられます。
wifi認証が関係しているときにネットワーク接続を確認してからバックグラウンド処理を行う正しい方法は何ですか?
ありがとう。
この問題の良い例は、全国のスターバックスにいるときに、Android デバイスが自動的に attwifi に接続し、wifi ステータスが接続済みに変わることです。ブラウザページに移動して使用条件と同意書に同意することにより疑似サインインするまでデータ