Я разработал приложение Wear OS 2. 0+, которое взаимодействует с HTTP API. Я использую Volley для подключения к этому API, но кажется, что он работает только тогда, когда я выключил Bluetooth. Любые запросы, которые я делаю с Bluetooth просто тайм-аут. Другой конец обычно отвечает в течение миллисекунд и возвращает не более нескольких килобайт.
В документации говорится о доступе к сетям:
Приложения Wear OS могут делать сетевые запросы. Когда часы подключены к телефону через Bluetooth, трафик сети часов обычно передается через телефон. Но когда телефон недоступен, используются Wi-Fi и сотовые сети, в зависимости от аппаратного обеспечения. Платформа Wear обрабатывает переходы между сетями.
Поэтому, насколько я понимаю, Android должен позаботиться о том, чтобы мои запросы поступали на другой конец, либо через Bluetooth (через телефон), либо через Wi-Fi.
Фактический код, который делает 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. Но создание сети с высокой пропускной способностью, которая мне не нужна, звучит немного ненужно, и батарея разряжает то, что я пытаюсь предотвратить.
Оказывается, проблема была на другой стороне. API просто никогда не отправляет ответ, который вызывал таймаут каждый раз, когда я отправляю запрос.
Я рекомендую протестировать Bluetooth, если вы столкнулись с подобной проблемой.