Android 多网络支持

Android多个网络连接

Android 5.0 LOLLIPOP (API Level 21) 

高级连接

新增的多网络功能允许应用查询可用网络提供的功能,例如它们是 WLAN 网络、蜂窝网络还是按流量计费网络,或者它们是否提供特定网络功能。然后应用可以请求连接并对连接丢失或其他网络变化作出响应。

Android 5.0 提供了新的多网络 API,允许您的应用动态扫描具有特定能力的可用网络,并与它们建立连接。当您的应用需要 SUPL、彩信或运营商计费网络等专业化网络时,或者您想使用特定类型的传输协议发送数据时,就可以使用此功能。

通过以上的Android版本更新文档可以看出,Android 在 5.0 以上的系统中支持了多个网络连接的特性,这个特性让我一下就联想到iOS中的Wi-Fi助理。

Apple Wi-Fi 助理的工作原理

通过 Wi-Fi 助理,即使您的 Wi-Fi 连接信号差,您仍可保持与互联网的连接。例如,如果您在使用 Safari 时因 Wi-Fi 连接信号差而出现网页无法载入的情况,Wi-Fi 助理将激活并自动切换到蜂窝移动网络,以便网页继续载入。您可以将 Wi-Fi 助理与大多数应用(例如,Safari、Apple Music、“邮件”、“地图”等)配合使用。 
当 Wi-Fi 助理激活时,您将在设备的状态栏中看到蜂窝移动数据图标。
由于当您的 Wi-Fi 连接信号差时,您将通过蜂窝移动网络保持与互联网的连接,您可能会用掉更多蜂窝移动数据。对于大多数用户,这应只比以往的用量高出很小的比率。如果您对您的数据用量有疑问,请了解有关 管理蜂窝移动数据的更多信息,或者 联系 Apple 支持

 

Android 提供的这个特性意味着应用可以选择特定的网络发送网络数据。在用手机上网的时候很可能会遇到这种情况,已经连上了WiFi但是WiFi信号弱或者是该WiFi设备并没有连接到互联网,因此导致网络访问非常的缓慢甚至无法访问网络。但是这个时候手机的移动网络信号可能是非常好的,那么如果是在 Android 5.0 以下的系统上,我们只能关闭手机的WiFi功能,然后使用移动网络重新访问。在 Android 5.0 及以上的系统中有了这个特性之后,意味着应用可以自己处理好这种情况,直接切换到移动网络上面访问,为用户提供更好的体验。话不多说让我们来看一下怎么使用吧

setProcessDefaultNetwork




要从您的应用以动态方式选择并连接网络,请执行以下步骤:

  1. 创建一个 ConnectivityManager
  2. 使用 NetworkRequest.Builder 类创建一个 NetworkRequest 对象,并指定您的应用感兴趣的网络功能和传输类型。
  3. 要扫描合适的网络,请调用 requestNetwork() 或 registerNetworkCallback(),并传入 NetworkRequest 对象和 ConnectivityManager.NetworkCallback 的实现。如果您想在检测到合适的网络时主动切换到该网络,请使用 requestNetwork() 方法;如果只是接收已扫描网络的通知而不需要主动切换,请改用 registerNetworkCallback() 方法。
当系统检测到合适的网络时,它会连接到该网络并调用  onAvailable() 回调。您可以使用回调中的  Network 对象来获取有关网络的更多信息,或者引导通信使用所选网络。

app都采用指定的网络

ConnectivityManager cm = (ConnectivityManager) context.getSystemService(
                          Context.CONNECTIVITY_SERVICE);
NetworkRequest.Builder req = new NetworkRequest.Builder();
req.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
cm.requestNetwork(req.build(), new ConnectivityManager.NetworkCallback() {
      

    @Override
    public void onAvailable(Network network) {
      
        try {
      
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
      
                ConnectivityManager.setProcessDefaultNetwork(network);
            } else {
      
                connectivityManager.bindProcessToNetwork(network);
            }
        } catch (IllegalStateException e) {
      
            Log.e(TAG, "ConnectivityManager.NetworkCallback.onAvailable: ", e);
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值