如何检测我的 Android 应用程序的 Wear 应用程序是否已安装在手表中

How to detect if the Wear app of my Android app is already installed in the watch

是否可以通过某种方式检测 Android 应用程序中的 Wear 迷你应用程序是否已安装在手表中?

我有一个应用程序无法在 phone 上使用,直到 Wear 部件安装到手表中,所以我想在此之前阻止所有交互。

关于应用程序更新,是否可以检测 Wear 部分是否已更新?

编辑:

看起来数据 API 甚至消息 API 调用都会在安装应用程序后进行缓冲和传送。然而,这并不能解决应用程序更新的问题。这可以通过接受的答案解决。

据我所知,没有开箱即用的解决方案。

如果您的 Wear 应用程序没有活动(因此无法由用户启动),您可以做的是在手持应用程序处于前台时定期向 Wear 发送类似 IS_INSTALLED 的消息,直到 Wear不会将它的版本号放入数据层。在应用程序更新时,您可以检查数据层中的版本号,如果它低于当前版本 - 重复该过程。

这种方法也将解决 Wear 设备未连接(或超出范围,本质上相同)的问题。

一种解决方案是使用 CapabilityClient(https://developers.google.com/android/reference/com/google/android/gms/wearable/CapabilityClient). First you can detect whether the Wearable and phone are connected or not using NodeClient(https://developers.google.com/android/reference/com/google/android/gms/wearable/NodeClient)。下面我在android.

中提到了检测手表是否连接到phone的代码
    Task<List<Node>> nodesTask = Wearable.getNodeClient(MainMobileActivity.this)
            .getConnectedNodes();
    nodesTask.addOnSuccessListener(new OnSuccessListener<List<Node>>() {

        @Override
        public void onSuccess(List<Node> nodes) {
            nodeSize = nodes.size();
            for (Node node : nodes) {
                Wearable.getMessageClient(MainMobileActivity.this)
                        .sendMessage(node.getId(), MESSAGE_PATH, "Hello from AndroidWear".getBytes());
            }

            Log.d("Hello" , "Message sent to Cordova");
        }
    });

因此,nodeSize 表示连接了多少 nodes/watches。

Wearable.getMessageClient(MainMobileActivity.this)
                        .sendMessage(node.getId(), MESSAGE_PATH, "Hello from AndroidWear".getBytes());

这段代码有助于将来自 phone 的消息发送给观看。现在来检测手表是否有应用程序。下面是它提到的代码。

    Task<CapabilityInfo> capabilityTask = Wearable.getCapabilityClient(this)
            .getCapability(CAPABILITY_WEAR_APP, CapabilityClient.FILTER_REACHABLE);
    capabilityTask.addOnSuccessListener(new OnSuccessListener<CapabilityInfo>() {
        @Override
        public void onSuccess(CapabilityInfo capabilityInfo) {
            mWearNodesWithApp = capabilityInfo.getNodes();

        }
    });

因此,如果 mWearNodesWithApp 显示为 0,则表示应用程序未安装,如果显示为 1,则表示应用程序已安装。

CAPABILITY_WEAR_APP 应该是字符串类型,并且应该具有您在磨损应用程序 wear.xml 中提到的值,而不是 phone 中提到的值。请记住为 Phone 和 Wear 应用程序提及相同的 applicationId。