在连接到WiFi时强制在Android上使用蜂窝连接

时间:2015-03-12 19:50:51

标签: android networking routing wifi cellular-network

我拥有一台也可作为Wifi接入点的诊断设备。任何设备都可以连接到该接入点并从设备请求信息。该设备显然不提供该网络的互联网访问。

我尝试创建一个Android应用程序,使用提供的Wifi网络从设备请求信息,然后使用蜂窝连接将数据上传到互联网上的某个服务器。

然而,只要连接了Wifi网络,Android似乎就会停用蜂窝连接。由于Wifi网络未连接到互联网,因此无法上传数据,并且该应用程序无用。

到目前为止,我尝试使用ConnectivityManager请求移动网络并将其绑定到我的通信套接字。此外,我尝试迭代所有网络接口并将通信套接字绑定到蜂窝接口的IP地址。但是,由于我无法从应用程序查询蜂窝网络接口,因此两个请求都失败了。

我如何设法通过蜂窝网络连接将数据从Wifi网络中的设备转发到某个服务器?

2 个答案:

答案 0 :(得分:0)

I filed a bug report for this issue.

该问题应在Android版本5.1.0中修复

答案 1 :(得分:0)

这是正确的示例代码。

NetworkRequest cellularRequest = new NetworkRequest.Builder()
        .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
        .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET).build();
if (connectivityManager != null) {
    connectivityManager.requestNetwork(cellularRequest, new ConnectivityManager.NetworkCallback() {
        @Override
        public void onAvailable(@NonNull Network network) {
            super.onAvailable(network);
            // do request with the network
            OkHttpClient.Builder builder = new OkHttpClient.Builder();
            builder.socketFactory(network.getSocketFactory());
            OkHttpClient client = builder.build();
            Call call = client.newCall(request);
            Response response = call.execute();

            // do remove callback. if you forget to remove it, you will received callback when cellular connect again.
            connectivityManager.unregisterNetworkCallback(this);
        }

        @Override
        public void onUnavailable() {
            super.onUnavailable();
            // do remove callback
            connectivityManager.unregisterNetworkCallback(this);
        }
    });
}