LoginSignup
12
2

More than 3 years have passed since last update.

Wi-Fi接続状況を監視するのにCONNECTIVITY_ACTIONが廃止予定なので、requestNetworkで監視してみた

Posted at

はじめに

タイトル通り、今までWi-Fi接続状況を監視するのに、ConnectivityManager#CONNECTIVITY_ACTIONをBroadcastReceiverに登録して監視していましたが、公式を見るとAPIレベル28で廃止されるとのことなので、ConnectivityManager#requestNetworkを使用して監視してみました。

ConnectivityManager#CONNECTIVITY_ACTION

CONNECTIVITY_ACTION.kt
// Receiver登録
IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION).also {
    registerReceiver(wifiBroadcastReceiver, it)
}

// Receiver
val wifiBroadcastReceiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        context ?: return
        val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        val activeNetwork = cm.activeNetworkInfo
        activeNetwork.also { info ->
            val isConnected = info.isConnectedOrConnecting
            val isWifi = info.type == ConnectivityManager.TYPE_WIFI
            val isMobile = info.type == ConnectivityManager.TYPE_MOBILE
        }
    }
}

ConnectivityManager#requestNetwork

requestNetwork.kt
val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager

val request = NetworkRequest
    .Builder()
    .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
    .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
    .build()

val networkCallback = object : ConnectivityManager.NetworkCallback() {
    override fun onAvailable(network: Network?) {
        super.onAvailable(network)
        // ネットワークが使用可能になったときの処理
        val capabilities = cm.getNetworkCapabilities(network)
        val isWifi = capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
        val isMobile = capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
    }

    override fun onLost(network: Network?) {
        super.onLost(network)
        // ネットワークの接続が切れたときの処理
    }

    override fun onUnavailable() {
        super.onUnavailable()
        // ネットワークが使用不可になったときの処理
    }
}

cm.requestNetwork(request, networkCallback)

おわりに

ConnectivityManager#requestNetworkはWi-Fiだけでなく、様々なネットワークと状態を監視できます。より汎用的になった、ということでしょうか。

参考

ConnectivityManager
Android Q の機能と API

12
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
2