两个 WearableListenerService 侦听来自单个可穿戴应用程序的消息

Two WearableListenerService listening for messages from single wearable app

我遇到了一个问题,我想让两个不同的 WearableListenerServices 侦听来自可穿戴应用程序的消息。既扩展了 WearableListenerService 又进行了配置:

<service android:name="no.xx.xx.wear.WearService">
    <intent-filter>
        <action android:name="com.google.android.gms.wearable.BIND_LISTENER" />
    </intent-filter>
</service>

消息使用 Wearable.MessageApi.sendMessage(...) 从可穿戴应用程序发送,并使用 WearableListenerService's onMessageReceived(MessageEvent messageEvent) 方法收听。

但是当我从一个侦听器服务转到两个侦听器服务时,似乎不再收到消息?

所以我的问题是:在单个配套可穿戴应用程序组合中,有多少服务可以通过 gms 侦听消息是否有限制?

您只能拥有一个WearableListenerService。 Android Wear 不支持超过一个

您可以在任何常规服务或 activity 中无限制地收听可穿戴消息。我相信你一次只能有一个 WearableListenerService。因此,您可能应该做的是使用 Wea​​rableListenerService 处理任何需要在后台处理的消息。当您是 运行 一个 activity 或需要侦听可穿戴消息的普通旧服务时,请实施 MessageApi.MessageListener。 这是一个例子

public class MainActivity extends Activity  implements
        GoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener, MessageApi.MessageListener {

    private GoogleApiClient googleClient; // A google client for Wear interaction

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Build a new GoogleApiClient that includes the Wearable API
        googleClient = new GoogleApiClient.Builder(this)
                .addApi(Wearable.API)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .build();
    }

    @Override
    public void onConnected(Bundle connectionHint) {
        Wearable.MessageApi.addListener(googleClient, this);
    }

    @Override
    public void onMessageReceived(MessageEvent messageEvent) {
        //Same onMessageReceived as in WearableListenerService
    }

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) { }
    @Override
    public void onConnectionSuspended(int i) { }
}

注意:您也可以将同样的基本原则用于服务。

不可能通过扩展 WearableListenerService 但我创建了一个小型库,它使用一个 WearableListenerService 和一个 BroadcastReceiver 将这些事件无延迟地传递给任何数量的监听器你愿意。

https://github.com/tajchert/ServiceWear

一个听众就够了。在不同 "paths" 的帮助下,您可以检查向您发送消息的侦听器服务,然后决定如何处理它。