【Android】NetworkRequestとLiveDataでネットワークの接続・切断を検知する

ネットワークの接続状態を監視するには、少し前まではBroadcastReceiverを使用しましたが、Android 7(APIレベル24)から非推奨、Android 9(APIレベル28)から廃止になりました。

現在ではNetworkRequestを使用することが推奨されています。
ConnectivityManager  |  Android Developers

まず、ネットワークの接続状態を確認するためには、AndroidManifestにパーミッションのリクエストを追加する必要があります。

パーミッションのリクエストを追加したら次は必要なプログラムを追加していきます。

①ネットワークの接続状態を入れるLiveDataクラス作成

②ネットワーク情報を取得するために、ネットワーク情報を管理しているクラスConnectivityManagerを追加

③onActive()メソッドとonInactive()メソッドをオーバーライド

④ネットワークの接続状態の変化を受け取るコールバックを追加

⑤NetworkCallbackクラスのonAvailable()メソッドをオーバーライドしてLiveDataにtrueを渡す

⑥NetworkCallbackクラスのonLost()メソッドをオーバーライドしてLiveDataにfalseを渡す

⑦NetworkRequestに調べたいネットワークの種類をセット

◎ネットワークの種類は以下の7つ

TRANSPORT_CELLULAR
TRANSPORT_WIFI
TRANSPORT_BLUETOOTH
TRANSPORT_ETHERNET
TRANSPORT_VPN
TRANSPORT_WIFI_AWARE
TRANSPORT_LOWPAN

⑧ネットワークの接続状態の変化を受け取るコールバックの登録と解除を追加

 

①〜⑧を行ったLiveDataクラスの全体的な形は以下のとおりです。

あとはこのLiveDataをActivity等で使うようにします。

⑨作成したLiveDataクラスをsubscribe

これで端末のWifiが接続または切断されたことが検知できるようになります。
※今回は例として検知後SnackBarを表示しています。
◎参考記事
【Android】ExtensionとLiveDataを使ってSnackbarを表示する