【Android】ネットワークの接続状況を判定するクラス『ConnectivityManager』を使う

アプリ開発しているパソコン Android開発

とあるお仕事で、アプリのオフライン時の処理を実装することがありました。

僕

「ネットワークに繋がっていない場合、エラーダイアログを表示させる」とかですね。

実は、ネットワークの接続状況を判定するためのクラスがあるので、それを今回紹介したいと思います!

そもそも、どういう場面で使うの?

ネットワーク接続状況を判定する場面は以下の通りです。

  • オフラインならエラーのダイアログを表示する
  • WiFi接続時のみダウンロードさせたいコンテンツがある

ゲームアプリなどでよく「WiFi接続時に〜…」とか表示されますね。

(時間があれば)ネットワーク通信の種類についても知っておこう!

スマホには様々な種類のネットワーク接続方法があります。

WiFi、モバイル通信、Bluetoothなど……。

詳しく知りたい人は、以下のリンク先の後半にあります。

『TYPE_』でページ内検索をすると見つかりますよ。

ConnectivityManager  |  Android デベロッパー  |  Android Developers

ConnectivityManager を使ってみる

早速、実際に実装していきましょう!

公式ドキュメントには、以下のように記載されています。

  • ConnectivityManager
    • ネットワーク接続の状態に関するクエリに応答します。
    • また、ネットワーク接続が変更されたときにアプリに通知します。
  • NetworkInfo
    • 特定のタイプ(現在のところ、モバイル接続か Wi-Fi 接続)のネットワーク、インターフェースのステータスを示します。

※ちなみに、NetworkInfoはAPI29からデプリケート(非推奨)になっています。

公式ドキュメントの具体例を基に、処理を書いてみました。

おそらく、connectivityManagerあたりでエラーが起きると思います。

Manifestファイルにパーミッションを追加したら解決しますよ。

applicationタグの上あたりに追記すればOKです👌

実装したあとのログ結果

ログで確認したところ、結果は以下のようになりました。

  • WiFi
    • 接続時:isWiFiConnection = true
    • 遮断時:isWiFiConnection = false
  • モバイル通信
    • 接続時:isMobileConnection = true
    • 遮断時:isMobileConnection = true
僕

『or』でisConnectedを判定しているからでしょうか。

うーん。少し思っていた結果とは異なりましたね。

もっと簡単に、オフラインかどうかを確認する

結果が想定と違いましたが、気を取り直して別の方法を試していきましょう!

このメソッドを使って、戻り値を確認したところ、WiFiかモバイル通信がONになっている状態だと『true』が返ってきました!

getActiveNetworkInfo()は、検出された最初の接続済みネットワークをNetworkInfoインスタンスで返してくれます。

妥協してはいかん

しかしここで問題が…!

上記で使用したactiveNetworkInfoは、deprecated(非推奨)になっているんです。。。

非推奨のメソッドは、後々使えなくなってしまうので、対応せずに放置しておくとアプリがクラッシュする可能性が出てきます。

ということで、新しいOSに対応した処理の書き方は、下記の記事で(投げやり)

感想

ジョージ・眉間シワ男
ジョージ・眉間シワ男

そもそもdeprecatedになるやつを

公式ドキュメントで紹介してるってどういうことや!!!

参考

ネットワーク使用状況を管理する  |  Android デベロッパー  |  Android Developers
このレッスンでは、ネットワーク リソースの使用について微調整可能なアプリを作成する方法を説明します。アプリで多数のネットワーク操作を実行する場合、ユーザーがアプリのデータを制御できるようにユーザー設定を提供する必要があります。
タイトルとURLをコピーしました