确定Android Wear设备是否在线

时间:2014-11-10 10:02:12

标签: android bluetooth broadcastreceiver wear-os

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

我尝试了以下内容:

  • 使用Nodelistener API。我想要做一些简单的事情 - 比如重新启动手表并看到它离线和在线,但我没有收到这些事件。我已经读过,这只是导致这些事件被发送的手表的核心配对/取消配对(这似乎是错误的,并且它太复杂,无法说明我的应用程序的用途) 。我还阅读了这篇文章(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不起作用,因为开发人员想要使用它,我真的需要这个功能。

有谁知道一个聪明的方法来解决这个问题?

**更新:**

只是为了澄清,我希望在设备连接和断开连接时收到回调。

3 个答案:

答案 0 :(得分:1)

您可以使用
检查连接到设备的节点数 List<Node> connectedNodes = Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).await().getNodes();
但要小心,谷歌眼镜算作一个节点,所以如果你有一个智能手表和谷歌眼镜连接到你的掌上电脑,你将有2个节点,而不是一个。

答案 1 :(得分:1)

正如Snow的答案所述,正确的方法是:

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()),而不是每次设备连接或断开连接时。

答案 2 :(得分:0)

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

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