WearableListenerService onMessageReceived不起作用

时间:2016-07-19 21:39:26

标签: android android-service wear-os

我正在通过手机向Wear发送消息。我希望即使在磨损活动结束时也能收到消息。

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

到目前为止我尝试过:

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

    Wear Manifest:

      <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>
    

    MessageService:

    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 );
    
           }
    

    主要活动的代码和移动设备上的主要活动来自this example.

    活动内的通信有效,服务无效。帮助

1 个答案:

答案 0 :(得分:0)

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