【问题标题】:Determine if Android Wear device is online确定 Android Wear 设备是否在线
【发布时间】:2014-11-10 10:02:12
【问题描述】:

我正在开发一个 Android 应用程序,该应用程序也使用 Android Wear 设备上的通知。了解 Wear 设备是否已连接对我的应用程序功能至关重要 - 而且似乎无法确定。

我尝试了以下方法:

  • 使用 Nodelistener API。我想做一些简单的事情——比如重新启动手表并看到它离线和在线,但我没有收到这些事件。我读到只有手表的硬核配对/取消配对会导致这些事件被发送(这在 imo 看来是错误的,而且说明我的应用程序的目的太复杂了)。我也阅读了这篇文章 (https://plus.google.com/+NathanSchwermann/posts/1Rs9etY5qte),但我已经在我的应用中使用了 WLS。
  • 改用蓝牙监听器(Broadcastreceiver 监听 BluetoothDevice.ACTION_ACL_CONNECTED 和 DISCONNECTED 操作)效果很好 - 除了我无法确定它是否是已连接的 Wear 设备。同样,这是因为 NodeApi:Wearable.NodeApi.getConnectedNodes(wearApiClient).setResultCallback ... 永远不会得到结果回调。顺便说一句,这就是我在获取 ACION_ACL_CONENCTED 操作时尝试做的事情 - 然后我只想查看连接了多少节点并确定它是否是新连接的节点。

所以这些都不起作用,我没有想法。似乎 NodeApi 无法正常工作,因为开发人员想要使用它,我真的需要这个功能。

有人知道解决这个问题的聪明方法吗?

**更新:**

澄清一下,我想在设备连接和断开连接时获得回调。

【问题讨论】:

标签: android bluetooth broadcastreceiver wear-os


【解决方案1】:

您可以使用
List<Node> connectedNodes = Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).await().getNodes(); 查看连接到您设备的节点数量
但请注意,Google Glass 算作一个节点,因此如果您将智能手表和 Google Glass 连接到您的掌上电脑,您将拥有 2 个节点,而不是一个。

【讨论】:

  • 这应该和我对 Wearable.NodeApi.getConnectedNodes(wearApiClient).setResultCallback 的调用相同 ...
【解决方案2】:

正如雪诺的回答中所说,正确的方法是:

List<Node> connectedNodes = Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).await().getNodes();

或者,如果您无法调用 await()(例如,如果您在主 UI 线程上):

Wearable.NodeApi.getConnectedNodes(wearApiClient).setResultCallback(new ResultCallback<NodeApi.GetConnectedNodesResult>() {
    @Override
    public void onResult(NodeApi.GetConnectedNodesResult getConnectedNodesResult) {
        List<Node> nodes = getConnectedNodesResult.getNodes();
        // Do your stuff with connected nodes here
    }
});

这里的重点是,ResultCallback 将提供您当前连接的可穿戴设备,因此它只会被调用一次(除非您再次调用 getConnectedNodes()),而不是每次设备连接或断开连接时。

【讨论】:

    【解决方案3】:

    我正在使用一种更简单的方法,适合我的用例,检查是否安装了 android wear 应用程序:

        try {
            getPackageManager().getPackageInfo("com.google.android.wearable.app", PackageManager.GET_META_DATA);
        } catch (PackageManager.NameNotFoundException e) {
            //android wear app is not installed
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-03
      相关资源
      最近更新 更多