繁体   English   中英

如何,当启用wifi和移动网络时,您在android上选择通过移动网络传输数据吗?

[英]How, when wifi and mobile networks are enabled, do you choose to transfer data through the mobile network on android?

除了一个例外,一切实际上都有效。 如果我们首先通过移动数据分配传输,那么一切正常,数据通过移动网络。 然后我选择了wifi数据,一切也都很好。 但是如果之后再选择移动数据,那么传输已经是通过wifi了,为什么呢? 为什么一开始就一切OK,再次打开wifi时,数据通过wifi,而不是通过移动通信? 谁知道原因? 先感谢您。 代码如下。

public void setTransportType(int transportType) {

    connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

    if (networkCallback != null) {
        connectivityManager.unregisterNetworkCallback(networkCallback);
        networkCallback = null;
    }

    NetworkRequest.Builder request = new NetworkRequest.Builder();

    if (transportType == TRANSPORT_TYPE_WIFI) {
        request.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
    } else {
        request.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
        request.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
    }

    networkCallback = new ConnectivityManager.NetworkCallback() {
        @Override
        public void onAvailable(Network network) {
            super.onAvailable(network);

            connectivityManager.bindProcessToNetwork(null);
            connectivityManager.bindProcessToNetwork(network);

            /*Operation after switching over*/
        }

    };

   connectivityManager.requestNetwork(request.build(), networkCallback); 
}

这是因为您已使用以下线路将您的连接绑定到 Wifi 网络:

connectivityManager.bindProcessToNetwork(network);

当你想切换到使用移动数据时,你需要重置绑定的网络:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    manager.bindProcessToNetwork(null);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    ConnectivityManager.setProcessDefaultNetwork(null);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM