连接到Wi-Fi相机的Android设备必须通过3G / 4G进行RESP API调用

时间:2018-06-26 10:54:19

标签: android android-wifi android-internet

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访问互联网

1 个答案:

答案 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)第二台设备已连接到接入点。请注意,移动数据应启用