/* DataLayerListenerService.java Copyright (c) 2015 NTT DOCOMO,INC. Released under the MIT license http://opensource.org/licenses/mit-license.php */ package org.deviceconnect.android.deviceplugin.wear; import android.app.Application; import android.util.Log; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.wearable.MessageApi; import com.google.android.gms.wearable.Wearable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; /** * このアプリで共有するGoogleApiClientを保持するアプリケーションクラス. */ public class WearApplication extends Application { /** Google API Client. */ private GoogleApiClient mGoogleApiClient; /** * スレッド管理用クラス. */ private final ExecutorService mExecutorService = Executors.newSingleThreadExecutor(); @Override public void onCreate() { super.onCreate(); init(); } @Override public void onTerminate() { super.onTerminate(); destroy(); } /** * GoogleApiClientを初期化する. */ public synchronized void init() { // Define google play service mGoogleApiClient = new GoogleApiClient.Builder(this).addApi(Wearable.API).build(); // Connect google play service mGoogleApiClient.connect(); } /** * GoogleApiClientの後始末を行う. */ public synchronized void destroy() { mExecutorService.shutdown(); if (mGoogleApiClient != null) { // Disconnect google play service. mGoogleApiClient.disconnect(); mGoogleApiClient = null; } } /** * GoogleApiClientを取得する. * @return GoogleApiClient */ public synchronized GoogleApiClient getGoogleApiClient() { if (mGoogleApiClient == null) { init(); } return mGoogleApiClient; } public void sendMessage(final String destinationId, final String path, final String data) { mExecutorService.execute(new Runnable() { @Override public void run() { GoogleApiClient client = mGoogleApiClient; if (!client.isConnected()) { ConnectionResult connectionResult = client.blockingConnect(30, TimeUnit.SECONDS); if (!connectionResult.isSuccess()) { if (BuildConfig.DEBUG) { Log.e("WEAR", "Failed to connect google play service."); } return; } } MessageApi.SendMessageResult result = Wearable.MessageApi.sendMessage(client, destinationId, path, data.getBytes()).await(); if (!result.getStatus().isSuccess()) { if (BuildConfig.DEBUG) { Log.e("WEAR", "Failed to send a sensor event."); } } } }); } }