WearableListenerService的onCreate与onDataChanged未触发问题排查
问题:DataClient手机向手表传输数据,WearableListenerService未触发
我尝试通过DataClient从手机向手表传输数据,已排查以下配置:相同包名、两端无build flavors、已在wear模块清单添加服务、相同path prefix、相同签名配置。参考官方DataLayer示例项目并复制部分代码,示例在Pixel 6 Pro与Pixel Watch硬件上运行正常,自身项目的发送数据部分表现与示例一致,但手表端的WearableListenerService的onCreate日志未打印,onDataChanged也未触发,怀疑清单配置存在问题。
手机端发送数据代码
class WearDataManager(val context: Context) { private val dataClient by lazy { Wearable.getDataClient(context) } companion object { private const val CLIENTS_PATH = "/clients" private const val CLIENT_LIST_KEY = "clientlist" } fun sendClientList(clientList: MutableList<String>) { GlobalScope.launch { try { val request = PutDataMapRequest.create(CLIENTS_PATH).apply { dataMap.putStringArray(CLIENT_LIST_KEY, arrayOf("clientList, test")) } .asPutDataRequest() .setUrgent() val result = dataClient.putDataItem(request).await() Log.d("TAG", "DataItem saved: $result") } catch (cancellationException: CancellationException) { throw cancellationException } catch (exception: Exception) { Log.d("TAG", "Saving DataItem failed: $exception") } } } }
手表端接收数据代码
class WearableListenerService: WearableListenerService() { companion object { const val CLIENTS_PATH = "/clients" } override fun onCreate() { super.onCreate() Log.d("testing", "STARTED SERVICE") } override fun onDataChanged(dataEvents: DataEventBuffer) { super.onDataChanged(dataEvents) Log.d("testing", "RECEIVED $dataEvents") } }
手表端清单中的服务配置
<service android:name=".wear.communication.WearableListenerService" android:exported="true"> <intent-filter> <action android:name="com.google.android.gms.wearable.DATA_CHANGED" /> <data android:host="*" android:pathPrefix="/clients" android:scheme="wear" /> </intent-filter> </service>
可能遗漏的配置排查点
- 验证服务类路径正确性:清单中
android:name的相对路径.wear.communication.WearableListenerService必须和实际类的包名完全匹配。如果服务类完整包名和相对路径对应的结构不符,必须填写完整类名。 - 确认Play Services依赖:wear模块必须引入正确版本的Wearable依赖,且和手机端版本一致,示例依赖配置:
implementation "com.google.android.gms:play-services-wearable:21.1.0" - 检查Google Services插件配置:确保wear模块的
build.gradle中应用了com.google.gms.google-services插件,且根目录的google-services.json文件在两端应用中配置正确。 - 确认服务继承类:确保
WearableListenerService继承的是com.google.android.gms.wearable.WearableListenerService,避免引入其他同名类导致冲突。 - 排查配对与应用版本:确认手表和手机已正确配对,且两端安装的是同一版本、同一签名的应用。
- 测试服务启动:可以在手表端应用启动时手动调用
startService(Intent(context, WearableListenerService::class.java)),验证onCreate日志是否打印,排除服务未被系统初始化的问题。
内容的提问来源于stack exchange,提问作者BlazeCodeDev
相关产品推荐
相关产品推荐

