只有在禁用3G / 4G时才能打开套接字?

时间:2016-12-12 09:23:32

标签: android sockets networking android-wifi

我想用我的Android应用程序执行以下操作:

  • 我有一个发送Wi-Fi网络(软AP)的连接对象,因此我的应用可以与之通信
  • 连接到发送Wi-fi的网络192.168.0.1上的本地设备
  • 我想打开一个套接字与该设备进行通信

                socket = new Socket();
                socket.setSoTimeout(10000);
                socket.connect(new InetSocketAddress("192.168.0.1", 80), 5000);
    

此代码适用于我的大多数测试设备,但Nexus 6(Android 7)除外我有以下情况

不工作的情况

  • 手机连接至Wifi并连接至3G / 4G

- >套接字无法打开!

有效的案例

  • 手机连接到Wifi而未连接到3G / 4F

- >套接字成功打开!

我可以通过编程方式将其用于所有情况吗?

1 个答案:

答案 0 :(得分:1)

我终于找到了解决方案

final ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest.Builder req = new NetworkRequest.Builder();
req.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
cm.requestNetwork(req.build(), new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(Network network) {
        cm.unregisterNetworkCallback(this);
        network.bindSocket(socket);
        socket.setSoTimeout(SOCKET_TIMEOUT);
        socket.connect(new InetSocketAddress(ip, port), CONNECTION_TIMEOUT);
    }
}
});