Android手机通过Wi-Fi连接到相机。相机没有互联网连接。 Android手机通过Wi-Fi与相机通信。 但是我需要发出Internet请求(REST API)并在3G / 4G网络上打开一个Socket,在Android上可以吗? 对于iOS,这没什么大不了的。
步骤: 1.我找到Camera Wi-Fi并连接到它 2.然后我需要执行一些REST API查询 3.我需要打开socenn并开始流式传输 但是由于有Wi-Fi连接,我无法通过3G / 4G访问互联网
答案 0 :(得分:0)
我找到了解决问题的方法。
1)必须添加网络,然后您才能进行查询
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public void addNetwork() {
NetworkRequest.Builder req = new NetworkRequest.Builder();
req.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
req.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
connectivityManager.requestNetwork(req.build(), new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(Network network) {
Log.e(TAG, "addNetwork.onAvailable network = " + network.hashCode());
try {
// Socket socket = network.getSocketFactory().createSocket();
URLConnection urlConnection = network.openConnection(new URL("you_url"));
urlConnection.setRequestProperty(CONTENT_TYPE, CONTENT_TYPE_VALUE);
urlConnection.setConnectTimeout(TIMEOUT_MILLIS);
urlConnection.setDoOutput(false);
urlConnection.setDoInput(true);
urlConnection.connect();
InputStream inputStream = urlConnection.getInputStream();
String responceString = streamToString(inputStream);
} catch (IOException e) {
Log.e(TAG, "IOException network " + e.toString());
}
if (networkCallback != null) {
networkCallback.onAvailable(network);
}
}
});
}
private String streamToString(InputStream is) throws IOException {
String str = "";
if (is != null) {
StringBuilder sb = new StringBuilder();
String line;
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
while ((line = reader.readLine()) != null) {
sb.append(line);
}
reader.close();
} finally {
is.close();
}
str = sb.toString();
}
return str;
}
2)之后,我们的网络出现在ConnectivityManager.getAllNetworks()中,您可以通过保存或通过Network.hashCode()找到它
我已经在2台设备的帮助下进行了检查
1)无法连接到WiFi的设备
2)第二台设备已连接到接入点。请注意,移动数据应启用