使用Google Message API接收服务中的数据

时间:2017-03-06 09:15:13

标签: android wear-os

我从磨损手表发送数据,字节。我希望在手机上的后台服务中接收数据,但永远不会调用onMesageReceived。我知道我做错了什么?我的第一次尝试是通过手机上的应用程序工作但不实用。

移动服务:

    public class LampControlService extends Service implements MessageApi.MessageListener, GoogleApiClient.ConnectionCallbacks {
        private static final String TAG = "test";
        private static final String WEAR_MESSAGE_PATH = "/message";
        private GoogleApiClient mGoogleApiClient;
        private ArrayAdapter<String> mAdapter;
        @Override
        public void onCreate(){
            HandlerThread thread = new HandlerThread("test");
            thread.start();

            //---Build a new Google API client--
            mGoogleApiClient = new GoogleApiClient.Builder(this)
                    .addApi(Wearable.API)
                    .addConnectionCallbacks(this)
                    .build();

            if (mGoogleApiClient != null && !(mGoogleApiClient.isConnected() ||
                    mGoogleApiClient.isConnecting()))
                    mGoogleApiClient.connect();    
        }

        public int onStartCommand(Intent intent, int flags, int startId){
            return START_STICKY;
        }

        @Override
        public void onDestroy() {
        }

        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }

        @Override
        public void onConnected(Bundle bundle) {
            Wearable.MessageApi.addListener( mGoogleApiClient, this );
            Log.d(TAG, "onConnected()");
        }

        @Override
        public void onMessageReceived( final MessageEvent messageEvent ) {
            Log.d(TAG, "onMessageReceived()");
            if (messageEvent.getPath().equalsIgnoreCase(WEAR_MESSAGE_PATH)) {
                String lamp = new String(messageEvent.getData());
                sendLampCommand(lamp);
            }
            else {
    //            super.onMessageReceived(messageEvent);
            }
        }
        // @Override
        public void onConnectionSuspended(int i) {
        }

        private static void sendLampCommand(String lamp){
          // Send lamp command to web server
        }
    }

在AndroidManifest中添加的行:

<service
    android:name=".LampControlService">
    <service android:name=".DataLayerListenerService">
        <intent-filter>
            <action android:name="com.google.android.gms.wearable.BIND_LISTENER" />
        </intent-filter>
    </service>
</service>

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。 首先,请查看Google服务库。使用支持您设备的最旧版本。

和/或检查您的设备是否休眠。某些设备的行为不正确。 我的意思是,打开这个目录:

.\Sdk\extras\google\m2repository\com\google\android\gms\play-services-wearable\

并检查您的版本。 不要使用上一个版本。使用8.4.0\或类似内容。

答案 1 :(得分:1)

我建议您延长WearableListenerService而不是尝试自己做所有事情。它已经为像您这样的用例做好了准备,并确保涵盖所有基础知识,而无需担心细节。

完整说明在此处:https://developer.android.com/training/wearables/data-layer/events.html#Listen(在 With WearableListenerService 部分中)