1 /* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.example.android.wearable.datalayer; 18 19 import android.content.Intent; 20 import android.net.Uri; 21 import android.util.Log; 22 23 import com.google.android.gms.common.ConnectionResult; 24 import com.google.android.gms.common.api.GoogleApiClient; 25 import com.google.android.gms.wearable.DataEvent; 26 import com.google.android.gms.wearable.DataEventBuffer; 27 import com.google.android.gms.wearable.MessageEvent; 28 import com.google.android.gms.wearable.Wearable; 29 import com.google.android.gms.wearable.WearableListenerService; 30 31 import java.util.concurrent.TimeUnit; 32 33 /** 34 * Listens to DataItems and Messages from the local node. 35 */ 36 public class DataLayerListenerService extends WearableListenerService { 37 38 private static final String TAG = "DataLayerService"; 39 40 private static final String START_ACTIVITY_PATH = "/start-activity"; 41 private static final String DATA_ITEM_RECEIVED_PATH = "/data-item-received"; 42 public static final String COUNT_PATH = "/count"; 43 public static final String IMAGE_PATH = "/image"; 44 public static final String IMAGE_KEY = "photo"; 45 GoogleApiClient mGoogleApiClient; 46 47 @Override onCreate()48 public void onCreate() { 49 super.onCreate(); 50 mGoogleApiClient = new GoogleApiClient.Builder(this) 51 .addApi(Wearable.API) 52 .build(); 53 mGoogleApiClient.connect(); 54 } 55 56 @Override onDataChanged(DataEventBuffer dataEvents)57 public void onDataChanged(DataEventBuffer dataEvents) { 58 LOGD(TAG, "onDataChanged: " + dataEvents); 59 if (!mGoogleApiClient.isConnected() || !mGoogleApiClient.isConnecting()) { 60 ConnectionResult connectionResult = mGoogleApiClient 61 .blockingConnect(30, TimeUnit.SECONDS); 62 if (!connectionResult.isSuccess()) { 63 Log.e(TAG, "DataLayerListenerService failed to connect to GoogleApiClient, " 64 + "error code: " + connectionResult.getErrorCode()); 65 return; 66 } 67 } 68 69 // Loop through the events and send a message back to the node that created the data item. 70 for (DataEvent event : dataEvents) { 71 Uri uri = event.getDataItem().getUri(); 72 String path = uri.getPath(); 73 if (COUNT_PATH.equals(path)) { 74 // Get the node id of the node that created the data item from the host portion of 75 // the uri. 76 String nodeId = uri.getHost(); 77 // Set the data of the message to be the bytes of the Uri. 78 byte[] payload = uri.toString().getBytes(); 79 80 // Send the rpc 81 Wearable.MessageApi.sendMessage(mGoogleApiClient, nodeId, DATA_ITEM_RECEIVED_PATH, 82 payload); 83 } 84 } 85 } 86 87 @Override onMessageReceived(MessageEvent messageEvent)88 public void onMessageReceived(MessageEvent messageEvent) { 89 LOGD(TAG, "onMessageReceived: " + messageEvent); 90 91 // Check to see if the message is to start an activity 92 if (messageEvent.getPath().equals(START_ACTIVITY_PATH)) { 93 Intent startIntent = new Intent(this, MainActivity.class); 94 startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 95 startActivity(startIntent); 96 } 97 } 98 LOGD(final String tag, String message)99 public static void LOGD(final String tag, String message) { 100 if (Log.isLoggable(tag, Log.DEBUG)) { 101 Log.d(tag, message); 102 } 103 } 104 }