0

有没有办法使用android广播接收器或networkcallback获取有关断开网络的详细信息?

EXTRA_NETWORK_INFO、getNetworkInfo(NetworkType) 已弃用。

getAllNetworks() 返回框架当前跟踪的所有网络的数组,但不返回断开连接的网络。

4

2 回答 2

0

是的,首先像这样注册广播接收器:

final IntentFilter intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
        context.registerReceiver(receiver, intentFilter);

当接收者是:

new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                // this part is trigered when there is some network changes, do checks here
            }
        };

也不要忘记注销它。

于 2019-09-09T12:55:20.027 回答
0

是的。NetworkInfo 类已从 API 级别 29 中弃用。相反,ConnectivityManager 类在这里会有所帮助。它有助于监控网络连接,并在网络连接发生变化或网络连接丢失时通知应用程序。它还通过允许应用程序了解可用网络的状态并允许应用程序为其数据流量请求和选择网络来促进。

但是,以下方法列表在 ConnectvityManager 类中已弃用:

getNetworkInfo返回有关特定网络类型的连接状态。
getAllNetworkInfo返回设备支持的所有网络类型的连接状态信息。 getActiveNetworkInfo返回当前活动的默认数据网络网络。

ConnectivityManager.NetworkCallback当前可用于确定网络更改状态。NetworkRequest 回调的此基类用于有关网络更改的通知,可以由需要网络更改通知的应用程序扩展。

支持以下方法列表:

getAllNetworks返回当前跟踪的所有网络的数组。
getActiveNetwork返回当前活动的默认数据网络的网络对象。

NetworkCapabilities类应有助于表示活动网络的能力。

一般来说,每当系统调用onAvailable(Network)时,它应该传递可用的网络,并且每当系统调用onLost(Network)时,它应该传递丢失的网络,它指的是丢失的特定网络(断开连接)并且参数告诉您哪个网络丢失(断开连接)。

onCapabilitiesChanged在onAvailable 之后立即被调用,这可以通过使用 hasTransport() 和适当的传输常量(如 TRANSPORT_CELLULAR 或 TRANSPORT_WIFI (感兴趣的网络))查询 NetworkCapabilities 来帮助确定可用网络的功能,例如它是蜂窝网络还是 WiFi 网络.

下面的代码片段考虑了上述信息,并有助于确定您是否具有蜂窝或 wifi 网络连接,这反过来又使人们能够确认断开的网络(丢失)是否确实没有被使用。

ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
    Network network = connectivityManager.getActiveNetwork();
    NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(network);
    return capabilities != null && (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) || capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI));
}
于 2019-12-28T17:28:53.180 回答