Android 连接WiFi时如何使用移动数据服务?

Android 连接WiFi时如何使用移动数据服务?,android,networking,Android,Networking,我正在开发一个测试应用程序,必须能够选择WiFi或移动数据服务。以下代码显示WiFi和移动网络都已连接,但bindProcessToNetwork()在移动网络上失败 public class MyActivity extends AppCompatActivity { private ConnectivityManager mConnMgr = null; private Network mNetworkWiFi = null; private Network mNet

我正在开发一个测试应用程序,必须能够选择WiFi或移动数据服务。以下代码显示WiFi和移动网络都已连接,但bindProcessToNetwork()在移动网络上失败

public class MyActivity extends AppCompatActivity {
    private ConnectivityManager mConnMgr = null;
    private Network mNetworkWiFi = null;
    private Network mNetworkMobile = null;

    mConnMgr =  (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
    boolean isWifiConn = false;
    boolean isMobileConn = false;
    for (Network network : mConnMgr.getAllNetworks()) {
        NetworkInfo networkInfo = mConnMgr.getNetworkInfo(network);

        if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
            isWifiConn = networkInfo.isConnected();
            mNetworkWiFi = network;
        }
        if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
            isMobileConn = networkInfo.isConnected();
            mNetworkMobile = network;
        }
    }

    if (mNetworkMobile && mConnMgr.getNetworkInfo(mNetworkMobile).isConnected()) {
        if (true != mConnMgr.bindProcessToNetwork(mNetworkMobile)) {
            Log.i(TAG, "Failed to bind to Mobile");
        }
    }
问题: 1.bindProcessToNetwork()是在WiFi和移动设备之间选择数据服务的正确方法吗?
2.是什么导致bindProcessToNetwork()在连接的移动网络上失败?

以下代码允许我在连接WiFi时使用移动数据服务:

                final NetworkRequest networkReq = new NetworkRequest.Builder().addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET).addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR).build();
                mConnMgr.requestNetwork(networkReq, new ConnectivityManager.NetworkCallback() {
                    @Override
                    public void onAvailable(Network network) {
                        Log.i(TAG, "Requested netwwork available: " + network.toString());
                        if (true != mConnMgr.bindProcessToNetwork(network)) {
                            Log.i(TAG, "Failed to bind to Mobile");
                        }

                    }
                });

以下代码允许我在连接WiFi时使用移动数据服务:

                final NetworkRequest networkReq = new NetworkRequest.Builder().addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET).addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR).build();
                mConnMgr.requestNetwork(networkReq, new ConnectivityManager.NetworkCallback() {
                    @Override
                    public void onAvailable(Network network) {
                        Log.i(TAG, "Requested netwwork available: " + network.toString());
                        if (true != mConnMgr.bindProcessToNetwork(network)) {
                            Log.i(TAG, "Failed to bind to Mobile");
                        }

                    }
                });

当WiFi与以下代码连接时,我可以使用移动数据服务:当WiFi与以下代码连接时,我可以使用移动数据服务:我在尝试bindProcessToNetwork时返回false-知道可能有什么问题吗?我上面评论中的问题是因为我没有互联网权限在我的清单中指定。当尝试将进程绑定到网络时,返回false-知道可能有什么问题吗?我上面评论中的问题是因为我没有在清单中指定的Internet权限。