リモート クエリから接続ステータス レポートを取得するために使用できるようにしたいアプリがあります。
WiFi が接続されているかどうか、モバイル ネットワーク経由でデータ アクセスが有効になっているかどうかを知りたいです。
WiFi が範囲外になった場合、モバイル ネットワークに依存できるかどうかを知りたいです。
問題は、WiFi で接続している場合、有効なデータが常に true として返され、WiFi で接続されていない場合にのみモバイル ネットワークを適切にクエリできることです。
私が見たすべての回答は、現在の接続を確認するためにポーリングすることを提案していますが、現在 WiFi で接続されている可能性がある場合でも、必要に応じてモバイル ネットワークが利用可能かどうかを知りたいです。
接続されているかどうかを確認するためにポーリングせずに、モバイル ネットワーク データが有効になっているかどうかを確認する方法はありますか?
編集
したがって、WiFi で接続されている場合、設定に移動して [データを有効にする] の選択を解除し、アプリで次のようにします。
boolean mob_avail =
conMan.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isAvailable();
mob_avail は「true」として返されますが、モバイル ネットワーク データを無効にしているため、「false」であると予想されます。
WiFi をオフにすると、モバイル ネットワーク データが無効になっているため、(当然のことながら) 接続されません。
WiFiで接続しているときにモバイルネットワークデータが有効になっているかどうかを確認するにはどうすればよいですか?
アップデート
ss1271 のコメントで提案されているように、 getAllNetworkInfo() を調べました
以下の3つの条件でモバイルネットワークについて返された情報を出力しました
WiFi オフ - モバイルデータ オン
WiFi オン - モバイルデータ オフ
WiFi オン - モバイルデータ オン
そして、次の結果を得ました:
WiFi オフの場合:
モバイル[HSUPA]、状態: 接続済み/接続済み、理由: 不明、追加: インターネット、ローミング: false、フェイルオーバー: false、isAvailable: true、featureId: -1、userDefault: false
WiFi オン / モバイル オフの場合
NetworkInfo: タイプ: モバイル[HSUPA]、状態: 切断/切断、理由: connectionDisabled、追加: (なし)、ローミング: false、フェイルオーバー: false、isAvailable: true、featureId: -1、userDefault: false
WiFi オン / モバイル オンの場合
NetworkInfo: タイプ: モバイル[HSPA]、状態: 切断/切断、理由: connectionDisabled、追加: (なし)、ローミング: false、フェイルオーバー: false、isAvailable: true、featureId: -1、userDefault: false
ご覧のとおり、isAvailable は毎回 true を返し、状態は WiFi が影響を受けているときにのみ [切断済み] として表示されました。
明確化
携帯電話が現在モバイル ネットワークに接続されているかどうかを確認するつもりはありません。ユーザーがモバイル ネットワーク経由のデータ アクセスを有効または無効にしたかどうかを確認しようとしています。[設定] -> [ワイヤレスとネットワークの設定] -> [モバイル ネットワークの設定] -> [データを有効にする] に移動して、これをオンまたはオフにすることができます。