2017-02-08 20 views
0

私は、重いプロセスのいくつかを実行してAPI呼び出しを行うための電話コンパニオンアプリを持っているWearのアプリケーションを作成中です。Android Wear to Handset Communication

は、これまでのところ、2つのデバイス間の通信に関しては、私はこのチュートリアルを次されている - http://android-wear-docs.readthedocs.io/en/latest/data.html

これは、携帯電話が時計と通信することができることを私に残しているが、今、私はどのように私思ったんだけど他の方法でそれを複製します。

私はWearアプリに持っている現在のコードは、(別々のリスナークラスはまた、電話や時計の上に存在している)、このようなものです:

public void sendTestMessage(View view) 
{ 
    String WEARABLE_DATA_PATH = "/wearable_data"; 
    DataMap dataMap = new DataMap(); 
    dataMap.putString("WATCH2PHONE TEST MESSAGE EVENT!", "1"); 
    new SendToDataLayerThread(WEARABLE_DATA_PATH, dataMap).start(); 
} 

class SendToDataLayerThread extends Thread 
{ 
    String path; 
    DataMap dataMap; 

    SendToDataLayerThread(String p, DataMap data) 
    { 
     path = p; 
     dataMap = data; 
    } 

    public void run() 
    { 
     PutDataMapRequest putDMR = PutDataMapRequest.create(path); 
     putDMR.getDataMap().putAll(dataMap); 
     PutDataRequest request = putDMR.asPutDataRequest(); 
     DataApi.DataItemResult result = Wearable.DataApi.putDataItem(googleClient, request).await(); 

     if (result.getStatus().isSuccess()) 
     { 
      Log.v("myTag", "DataMap: " + dataMap + " sent successfully to data layer "); 
     } 

     else 
     { 
      Log.v("myTag", "ERROR: failed to send DataMap to data layer"); 
     } 
    } 
} 

リスナクラス(時計のため、携帯電話のバージョンは同じです) :

public class ListenerService extends WearableListenerService 
{ 
    @Override 
    public void onDataChanged(DataEventBuffer dataEvents) 
    { 
     DataMap dataMap; 
     for (DataEvent event : dataEvents) 
     { 
      Log.v("myTag", "DataMap received on device: " + DataMapItem.fromDataItem(event.getDataItem()).getDataMap()); 
     } 
    } 
} 

したがって、テストメッセージを送信すると、メッセージがレイヤーに送信され、送信されますが時計のリスナーサービスによって受信されます。

私は "String WEARABLE_DATA_PATH ="/wearable_data ";"と仮定しています。それが時計によって受け取られてしまう原因になっていますが、それを正しく送信するためには何を変更するべきかわかりません。

答えて

1

データAPIは両方向で同じように機能します。ハンドヘルドで使用する特定のアーキテクチャはアプリの構造によって異なりますが、ドキュメントのオプションの概要はhttps://developer.android.com/training/wearables/data-layer/events.html#Listenです。

このページでは、受信したデータイベントをフィルタリングするためにパスを使用する方法についても説明します。これもアーキテクチャによって異なりますが、"/data_from_handheld""/data_from_wearable"のようなパスを使用して、異なる方向に進むDataItemを区別することは妥当かもしれません。または、同じパスを使用すると、接続されているすべてのデバイスにデータイベントが表示されます。これは必要な場合とそうでない場合があります。

その他の一般的な「gotcha」:データAPIイベントは、データがの場合、実際にはが変更されたときにのみ発生します。これはAPIが実世界の通信を効率的に処理する方法ですが、開発が難しくなる可能性があります。それを強制するには、次のような常に異なる項目を含めるだけです。

dataMap.putLong("timestamp", System.nanoTime()); 

...アプリをデプロイする前にそれを必ず実行してください。

関連する問題