OnCapabilityChanged在手机上工作但不在可穿戴设备上

HPa*_*age 6 android android-wear-data-api android-wear-2.0 wear-os

仔细按照本文中的说明操作后:

如何检测android磨损设备何时断开连接?我终于设法让手机检测可穿戴设备的连接时间onCapabilityChanged.

我在可穿戴方面遵循了完全相同的步骤,我试图检测手机何时连接到可穿戴设备但从onCapabilityChanged未被触发.

wear.xml(在电话上)

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="android_wear_capabilities">
        <item>track_phone</item>
    </string-array>
</resources>
Run Code Online (Sandbox Code Playgroud)

在AndroidManifest(可穿戴)

<service android:name=".BackgroundService.WearableService"
            android:enabled="true"
            android:exported="true" >
            <intent-filter>
                <action android:name="com.google.android.gms.wearable.CAPABILITY_CHANGED" />
                <data android:scheme="wear" android:host="*"/>
            </intent-filter>
        </service>
Run Code Online (Sandbox Code Playgroud)

在WearableService中(在可穿戴设备上)

override fun onCapabilityChanged(p0: CapabilityInfo?) {
    super.onCapabilityChanged(p0)
    Log.i("WearableService", "Capability changed: {${p0?.nodes?.size ?: "null"}")
}
Run Code Online (Sandbox Code Playgroud)

我确信该服务已启动,因为我有另一个进程从它运行

我在电话那边做同样的事情.当我解除连接/连接时onCapabilityChanged,在手机的服务中正确调用蓝牙,而不是在可穿戴设备上.

有任何想法吗?

HPa*_*age 1

在尝试了一切使其正常工作后,我选择使用标准Service而不是WearableListenerService.

CapabilityClient.OnCapabilityChangedListenerService

override fun onCapabilityChanged(p0: CapabilityInfo) {
        Log.i("WearService", "Wearable Capability changed: {${p0?.nodes?.size ?: "null"}")
    }
Run Code Online (Sandbox Code Playgroud)

并注册监听器:

override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
Wearable.getCapabilityClient(this).addListener(this, CAPABILITY)
        return super.onStartCommand(intent, flags, startId)
}
Run Code Online (Sandbox Code Playgroud)