【问题标题】:Listening to Internet changes (No Network Detection)监听 Internet 变化(无网络检测)
【发布时间】:2018-12-11 19:52:38
【问题描述】:

注册以下监听器会在互联网连接发生变化时还是仅在网络连接发生变化时通知您的应用?

即使手机仍连接到同一网络,我也需要在互联网开启或关闭时收到通知。

<receiver
        android:name="com.internetconnection_demo.InternetConnector_Receiver"
        android:enabled="true" >
        <intent-filter>

            <!-- Intent filters for broadcast receiver -->
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
            <action android:name="android.net.wifi.STATE_CHANGE" />
        </intent-filter>
    </receiver>

【问题讨论】:

  • Android 中没有跟踪互联网连接的公共框架。

标签: android


【解决方案1】:

如果您使用 Lollipop (API 21) 或更高版本,我不会使用 BroadcastReceiver 路线。尝试这样的事情:

fun monitorWifiConnection() {
    var connectivityManager: ConnectivityManager = getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager
    val builder = NetworkRequest.Builder()
            .addTransportType(android.net.NetworkCapabilities.TRANSPORT_WIFI)
    connectivityManager.registerNetworkCallback(builder.build(), getConnectivityManagerCallback())
}

private fun getConnectivityManagerCallback(): ConnectivityManager.NetworkCallback {
    connectivityManagerCallback = object : ConnectivityManager.NetworkCallback() {
        override fun onAvailable(network: Network?) {
            //Connected to wifi
        }

        override fun onLost(network: Network?) {
            //Lost connection to wifi
        }
    }
    return connectivityManagerCallback
}

通过排除NetworkCapabilities.TRANSPORT_CELLULAR 选项并包括NetworkCapabilities.TRANSPORT_WIFI,您应该只收到有关wifi 连接的通知。

【讨论】:

  • 但是即使我仍然连接到WIFI,这是否会触发Internet on/off的回调?
  • 您是指蜂窝网络吗?请参阅我在代码 sn-p 下方添加的最后一条注释。您可以选择监控蜂窝网络或 wifi 或两者兼而有之。这个请求只监控wifi。
  • 假设发生了以下情况。 - 我已连接到家里的 wifi。 - 我仍然连接到 wifi,但 wifi 接入点本身失去了互联网连接。这种情况下会回调吗?
  • 是的,它应该是这样运行的
  • 我认为顶部可能需要 NET_CAPABILITY_VALIDATED 标志(仅 API 23+)cf。 stackoverflow.com/a/41063539/93974
猜你喜欢
  • 1970-01-01
  • 2016-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-21
  • 2011-09-07
  • 2010-12-19
  • 2015-08-27
相关资源
最近更新 更多