Невозможно отправить HTTP-запросы по износу Bluetooth - PullRequest
1 голос
/ 16 марта 2019

Я разработал приложение Wear OS 2.0+, которое взаимодействует с HTTP API.Я использую Volley для подключения к этому API, но кажется, что он работает только тогда, когда я выключил Bluetooth.Любые запросы, которые я делаю с Bluetooth просто тайм-аут.Другой конец обычно отвечает в течение миллисекунд и возвращает не более нескольких килобайт.

В документации говорится следующее о доступе к сети:

Изнашиваемые приложения ОС могут выполнять сетевые запросы.Когда часы подключены к телефону через Bluetooth, сетевой трафик часов обычно передается через телефон.Но когда телефон недоступен, используются Wi-Fi и сотовые сети, в зависимости от аппаратного обеспечения.Платформа Wear обрабатывает переходы между сетями.

Так что, насколько я понимаю, Android должен позаботиться о том, чтобы мои запросы поступали на другой конец, либо через Bluetooth (через прокси через телефон), либо через wifi.

Фактический код, который делает HTTP-запрос с залпом:

public <T> CompletableFuture<T> send(String url, Class<T> type) {
    CompletableFuture<T> requestCompletableFuture = new CompletableFuture<>();

    JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
            response -> {
                T data = serializer.fromJson(response.toString(), type);

                requestCompletableFuture.complete(data);
            }, (ex) -> {
                requestCompletableFuture.completeExceptionally(ex);
    });

    request.setRetryPolicy(new DefaultRetryPolicy(15000,
            0,
            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

    requestQueue.add(request);

    return requestCompletableFuture;
}

Android действительно предоставляет ConnectivityManager, который дает мне возможность запрашивать сеть WIFI.Но создание сети с высокой пропускной способностью, которая мне не нужна, звучит немного ненужно, а батарея разряжает то, что я пытаюсь предотвратить.

1 Ответ

1 голос
/ 18 марта 2019

Оказывается, проблема была на другой стороне. API просто никогда не отправляет ответ, который вызывал таймаут каждый раз, когда я отправляю запрос.

Я рекомендую протестировать Bluetooth, если вы столкнулись с подобной проблемой.

...