【问题标题】:Unable to send HTTP requests on wearos bluetooth无法在wearos 蓝牙上发送HTTP 请求
【发布时间】:2019-03-16 18:20:37
【问题描述】:

我开发了一个与 HTTP API 通信的 wear os 2.0+ 应用程序。我正在使用 Volley 连接到这个 API,但它似乎只在我关闭蓝牙时才起作用。我用蓝牙发出的任何请求都会超时。另一端通常会在几毫秒内响应,返回的数据不超过几千字节。

该文档说明了以下有关网络访问的内容:

Wear OS 应用可以发出网络请求。当手表有蓝牙时 连接手机,手表的网络流量一般是 通过电话代理。但是当手机不可用时,Wi-Fi 和 使用蜂窝网络,具体取决于硬件。磨损 平台处理网络之间的转换。

因此,据我了解,Android 应该注意确保我的请求通过蓝牙(通过电话代理)或 wifi 到达另一端。

使用 volley 发出 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 网络。但是创建一个我不需要的高带宽网络听起来有点不必要,并且会耗尽我试图防止的电池。

【问题讨论】:

  • #MeToo 我一直在寻找这个问题的答案。如果您看过这篇文章:stackoverflow.com/questions/31259692/… 一位谷歌工程师确认所有收音机随时可用...但您发现在实践中似乎很难实现。
  • 顺便说一句,您是否能够使用 ConnectivityManager 做到这一点?即使我想确认这确实是正确的方法,这似乎有点过分,因为我相信 BT 已经是一个高带宽网络,只是一个低功率网络,不确定。有道理,操作系统想要在 BT 可用时关闭耗电的 wifi,但应该有一种明显的方法来路由它。 FWIW 我找到了解决这个问题的一种非常可接受的方法,一旦我明白这是一个真正的问题而不是我们的误解,我很乐意分享。
  • 我还没试过connectivitymanager。我今天将它添加到应用程序中,看看它是否有效。最后一个选项可能是使用其中一个数据层应用程序向手机发送请求以代理请求。
  • 请跟进。老实说,我无法让 Connectitity Manager 工作,并且很想知道它是否正确。
  • 该死的......就像你一样,我打了另一个香草测试服务器,通过蓝牙的呼叫按预期工作。问题一直与我的生产服务器有关......我没有考虑过,因为没有人遇到过问题。我真的很感谢你的洞察力。

标签: android wear-os


【解决方案1】:

原来问题出在另一边。每次我发送请求时,API 都不会发送导致超时的响应。

如果您遇到类似问题,我建议您在蓝牙上进行测试。

【讨论】:

    猜你喜欢
    • 2021-05-13
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多