【发布时间】:2025-12-07 00:55:02
【问题描述】:
我正在从手机向 Wear 发送消息。即使穿戴活动关闭,我也希望能够接收消息。
我编写了一个小服务,如果它收到一条消息,它就会启动我的主 Activity (UI)。但是,在 WearableListenerService 中永远不会调用 onMessageReceived 函数。我还尝试了this tutorial 的示例代码,但它似乎对我不起作用。
到目前为止我所尝试的:
- 在 SO 上发布的具有相同问题的其他线程提到了与 移动和穿戴模块中的 applicationId。两个模块中的 applicationId 相同。
- 我尝试在 Activity 中编写 messageReceived 函数,只要 Activity 处于打开状态,它就可以工作(这是预期的行为)。
- 我知道我不必启动 WearableListenerService,它会在收到消息后自动启动,但作为最后一次尝试,我明确尝试从活动中启动它。该服务确实已创建,但 onMessageReceived() 函数不起作用。它甚至没有达到功能(通过放置日志进行测试)。
- 我还尝试将其设为常规后台服务(就像在 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_CHANGED、CAPABILITY_CHANGED和其他所有东西吗?尝试将其缩减为MESSAGE_RECEIVED。另外,/prefix是您的正确路径吗?看起来像是某处教程中的示例前缀。 -
@KENdi 我确实检查了那个问题。就像我在原始帖子中提到的那样, applicationId 不是问题,这是该问题中公认的答案。我也检查了构建属性,没有发现任何问题。
-
@String:我只有 MESSAGE_RECEIVED 一开始,我只是添加了其他的作为在黑暗中的尝试(这显然没有工作)。此外,添加比需要更多的过滤器不应阻止其运行,对吗?
-
当然,添加更多
action过滤器不应该破坏任何东西 - 但我们正在尝试诊断一些从表面上看应该有效的东西。删除任何无关的东西是做到这一点的一种方法。android:pathPrefix呢?
标签: android android-service wear-os