onCapabilityChanged 在 disabling/enabling 连接时不会在手持设备和可穿戴设备上触发

onCapabilityChanged is not fired on both handheld and wearable while disabling/enabling connections

<service android:name=".SMessage">
        <intent-filter>
            <action android:name="com.google.android.gms.wearable.CAPABILITY_CHANGED" />
            <action android:name="com.google.android.gms.wearable.MESSAGE_RECEIVED" />
            <data android:host="*" android:pathPrefix="/send-message" android:scheme="wear" />
        </intent-filter>
    </service>


public class SMessage extends WearableListenerService {

@Override
        public void onCapabilityChanged(CapabilityInfo capabilityInfo) {
        super.onCapabilityChanged(capabilityInfo);
        _A.toast("onCapabilityChanged");
        Set<Node> connectedNodes = capabilityInfo.getNodes();
        pickBestNodeId(connectedNodes);
    }
}

如果我启用飞行器模式或禁用蓝牙连接,则不会触发此方法onCapabilityChanged

我错过了什么? _A.toast 使用应用程序 class 显示 toast。

发送消息有效!

您需要包含一个 android:path 元素来标识您正在侦听的(完全限定的)功能:

<intent-filter>
    <action android:name="com.google.android.gms.wearable.CAPABILITY_CHANGED" />
    <data android:host="*" android:scheme="wear" 
          android:path="/com.mypackagename.my_capability_name"/> 
</intent-filter>

其中 my_capability_name 在您应用的 wear.xml 中定义 运行 在其他设备上:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="android_wear_capabilities">
        <item>my_capability_name</item>
    </string-array>
</resources>

https://developer.android.com/training/wearables/data-layer/messages.html#AdvertiseCapabilities 中所述。

然而,有几点需要注意: