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 中所述。
然而,有几点需要注意:
- 因为您的应用会 运行 每次 设备 dis/connect,因此您可能会发现电池电量耗尽。
- 与所有其他清单声明的广播接收器一样,这将在 Android 中停止工作 O: https://developer.android.com/preview/features/background.html#broadcasts
<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 中所述。
然而,有几点需要注意:
- 因为您的应用会 运行 每次 设备 dis/connect,因此您可能会发现电池电量耗尽。
- 与所有其他清单声明的广播接收器一样,这将在 Android 中停止工作 O: https://developer.android.com/preview/features/background.html#broadcasts