【问题标题】:WearableListenerService onMessageReceived not workingWearableListenerService onMessageReceived 不起作用
【发布时间】:2025-12-07 00:55:02
【问题描述】:

我正在从手机向 Wear 发送消息。即使穿戴活动关闭,我也希望能够接收消息。

我编写了一个小服务,如果它收到一条消息,它就会启动我的主 Activity (UI)。但是,在 WearableListenerService 中永远不会调用 onMessageReceived 函数。我还尝试了this tutorial 的示例代码,但它似乎对我不起作用。

到目前为止我所尝试的:

  1. 在 SO 上发布的具有相同问题的其他线程提到了与 移动和穿戴模块中的 applicationId。两个模块中的 applicationId 相同。
  2. 我尝试在 Activity 中编写 messageReceived 函数,只要 Activity 处于打开状态,它就可以工作(这是预期的行为)。
  3. 我知道我不必启动 WearableListenerService,它会在收到消息后自动启动,但作为最后一次尝试,我明确尝试从活动中启动它。该服务确实已创建,但 onMessageReceived() 函数不起作用。它甚至没有达到功能(通过放置日志进行测试)。
  4. 我还尝试将其设为常规后台服务(就像在 Android 中那样),将通信部分复制到服务中,但无济于事。

代码如下:

佩戴清单:

  <service android:name=".MessageService">
        <intent-filter>
            <action android:name="com.google.android.gms.wearable.DATA_CHANGED" />
            <action android:name="com.google.android.gms.wearable.MESSAGE_RECEIVED" />
            <action android:name="com.google.android.gms.wearable.CAPABILITY_CHANGED" />
            <action android:name="com.google.android.gms.wearable.CHANNEL_EVENT" />
            <action android:name="com.google.android.gms.wearable.BIND_LISTENER" />
            <data android:scheme="wear" android:host="*" android:pathPrefix="/prefix" />
        </intent-filter>
    </service>

消息服务:

public class MessageService extends WearableListenerService {
public Handler h;
@Override
public void onCreate() {

    Log.i("service", "im here");

}
@Override
public void onMessageReceived(MessageEvent messageEvent) {
    Log.i("onMessageReceived","im here!");
        Intent intent = new Intent( this, MainActivity.class );
        intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK );
        startActivity( intent );

       }

Wear 中的 Main Activity 和移动端的主要 Activity 代码来自this example.

活动内的通信正常,服务不工作。帮忙?

【问题讨论】:

  • 你可以试试看这个相关的SO question,可能和你的问题一样。造成这个问题的原因是磨损模块上的build flavor。您也可以查看此github,它与您的场景相同,您希望将消息从手机发送到穿戴设备。
  • 我会尝试减少您的intent-filter。你真的需要DATA_CHANGEDCAPABILITY_CHANGED 和其他所有东西吗?尝试将其缩减为 MESSAGE_RECEIVED。另外,/prefix 是您的正确路径吗?看起来像是某处教程中的示例前缀。
  • @KENdi 我确实检查了那个问题。就像我在原始帖子中提到的那样, applicationId 不是问题,这是该问题中公认的答案。我也检查了构建属性,没有发现任何问题。
  • @String:我只有 MESSAGE_RECEIVED 一开始,我只是添加了其他的作为在黑暗中的尝试(这显然没有工作)。此外,添加比需要更多的过滤器不应阻止其运行,对吗?
  • 当然,添加更多action 过滤器不应该破坏任何东西 - 但我们正在尝试诊断一些从表面上看应该有效的东西。删除任何无关的东西是做到这一点的一种方法。 android:pathPrefix 呢?

标签: android android-service wear-os


【解决方案1】:

移动应用中的消息路径必须与服务的意图过滤器中的路径相匹配。您在意图过滤器中将此作为“/前缀”,但在移动应用中为“message1”或“message2”。

【讨论】: