我拥有一台也可作为Wifi接入点的诊断设备。任何设备都可以连接到该接入点并从设备请求信息。该设备显然不提供该网络的互联网访问。
我尝试创建一个Android应用程序,使用提供的Wifi网络从设备请求信息,然后使用蜂窝连接将数据上传到互联网上的某个服务器。
然而,只要连接了Wifi网络,Android似乎就会停用蜂窝连接。由于Wifi网络未连接到互联网,因此无法上传数据,并且该应用程序无用。到目前为止,我尝试使用ConnectivityManager
请求移动网络并将其绑定到我的通信套接字。此外,我尝试迭代所有网络接口并将通信套接字绑定到蜂窝接口的IP地址。但是,由于我无法从应用程序查询蜂窝网络接口,因此两个请求都失败了。
我如何设法通过蜂窝网络连接将数据从Wifi网络中的设备转发到某个服务器?
答案 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);
}
});
}