我想用我的Android应用程序执行以下操作:
192.168.0.1
上的本地设备我想打开一个套接字与该设备进行通信
socket = new Socket();
socket.setSoTimeout(10000);
socket.connect(new InetSocketAddress("192.168.0.1", 80), 5000);
此代码适用于我的大多数测试设备,但Nexus 6(Android 7)除外我有以下情况
不工作的情况
- >套接字无法打开!
有效的案例
- >套接字成功打开!
我可以通过编程方式将其用于所有情况吗?
答案 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);
}
}
});