Android-устройство, подключенное к камере по Wi-Fi, должно выполнить вызов RESP API через 3G / 4G - PullRequest
0 голосов
/ 26 июня 2018

Телефон Android подключен к камере через Wi-Fi. Камера не имеет подключения к Интернету. Телефон Android связывается с камерой через Wi-Fi. Но мне нужно делать интернет-запросы (REST API) и открывать сокет в сети 3G / 4G, возможно ли это сделать на Android? Для iOS это не имеет большого значения.

Шаги: 1. Я нахожу камеру Wi-Fi и подключаюсь к ней 2. Затем мне нужно сделать несколько запросов REST API 3. Мне нужно открыть socenn и начать потоковую передачу Но из-за подключения Wi-Fi я не могу получить доступ в интернет через 3G / 4G

1 Ответ

0 голосов
/ 26 июня 2018

Я нашел решение проблемы.

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) Второе устройство было подключено к точке доступа. Обратите внимание, мобильные данные должны быть на

...