2017-08-09 17 views
7

エミュレートされたモバイルデバイスからエミュレートされたウェアデバイスにメッセージを送信しようとしています。 Android Wearアプリでウェアデバイスをペア設定し、ウェアデバイスのonPeerConnectedにヒットしたことを確認できます(onMessageReceivedはありません)。ウェアラブルMessageAPI onMessageReceivedは決してヒットしません。異なるデバイスID

node.getId()を返すために2つのコードバージョンを使用すると、ウェアデバイスの2つの異なるIDが返されます。

  new Thread(new Runnable() { 
       @Override 
       public void run() { 

        NodeApi.GetLocalNodeResult nodes = Wearable.NodeApi.getLocalNode(mGoogleApiClient).await(); 
        Node node = nodes.getNode(); 
        MessageApi.SendMessageResult result = Wearable.MessageApi.sendMessage(mGoogleApiClient, node.getId(), "Hello Watch 1", null).await(); 

        if (!result.getStatus().isSuccess()) { 
         Log.e(getPackageName(), "error"); 
        } else { 
         Log.i(getPackageName(), "success!!!! sent to: " + node.getId()); 
        } 
       } 
      }).start 

リターン:08-09 10:24:33.106 17914から18007/com.wear.myapp I/com.wear.myapp:この実行

成功を!!!! この実行223faf0e

  new Thread(new Runnable() { 
       @Override 
       public void run() { 

        NodeApi.GetConnectedNodesResult nodes = Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).await(); 

        for (Node node : nodes.getNodes()) { 
         MessageApi.SendMessageResult result = Wearable.MessageApi.sendMessage(mGoogleApiClient, node.getId(), "Hello Watch 2", null).await(); 

         if (!result.getStatus().isSuccess()) { 
          Log.e(getPackageName(), "error"); 
         } else { 
          Log.i(getPackageName(), "success!!!! sent to: " + node.getId()); 
         } 
        } 
       } 
      }).start(); 

戻り値:08-09 10:24:33.108 17914から18006/com.wear.myapp I/com.wear.streamer:成功をに送信!!!! 3a000c12

偽のノードIDでのハードコーディングでも、ログに成功メッセージが返されます。私は偽陽性の結果を得ているように感じる。

WearableListenerService:

  @Override 
      public void onMessageReceived(MessageEvent messageEvent) { 
       Log.i(getPackageName(), "Message received"); 
      } 


      @Override 
      public void onPeerConnected(Node peer) { 
       Log.i(getPackageName(), "Peer connected"); 
      } 

私はこれに似たすべてのSOの質問を読んできましたが、誰もがデバイスIDの異なる言及見ていません。私はapplicationIdsと依存関係がモバイルとウェアの間で同じであることを三重にチェックしました。

UPDATE:

Wearable.NodeApi.getConnectedNodesにはないながら、私はまだのnodeIdはgetConnectedNodesは、私が使用してすべきかであると信じて私につながる、返されますウエアエミュレータ登録解除とWearable.NodeApi.getLocalNodeを実行した場合。

また、Wearエミュレータをシャットダウンしても、接続ノードIDはgetLocalNodeに戻ってしまい、時計以外の何かが返されていると思われます。

答えて

1

をまず第一に、onPeerConnectedのような非推奨メソッドを使用しないでください。 代わりに常にCapabilityApiメソッドを使用してください。これは不自然です!

私は質問があります。どの種類のAndroid Wear APK(ハンドヘルド)ファイルを使用していますか?現代版のAndroid Wear APKは役に立ちませんか?彼らは正しく動作しません。

旧バージョンのAPIを使用している場合、CapabilityApiなどの最新のAPIは機能しないことを理解しておく必要があります。

エミュレートされたウェアラブルとエミュレートされたハンドヘルドを安定して接続することは不可能です。そのうちの1つは実際のデバイスでなければなりません。

私が示唆できる唯一の解決策は、実際のウェアラブルデバイスとハンドヘルドデバイスのアプリケーションをテストすることです。

常に最新のGoogleServicesライブラリを使用してテストしたり、実際のデバイスを使用したり、廃止予定のAPIを使用したりしないでください。

公開する前に、更新されていないデバイスでもアプリを動作させるために、GoogleServicesライブラリのバージョンを減らしてください。

私の練習では、エミュレータは非常に奇妙に動作します。

+0

'onPeerConnected'が廃止されたことに気づいていませんでした。通常、Android StudioはAPIが非推奨になっても 'onPeerConnected'ではないというメッセージを表示します。残念ながら、自分が所有するデバイスにはまだ必要なAPIがないため、エミュレータを使用する必要があります。私は 'CapabilityAPI'を調べます。ありがとう –

+0

将来的に誰にでも役立つ場合は、エミュレータを使用して、携帯電話からウェアラブルデバイスにメッセージを送信することができます。これは、文書化されていない 'CapabilityApi' –

0

次のような問題が発生する可能性があります。接続されているすべてのノードを取得していて、メッセージの最初のノードを取得している可能性があります。クラウドノード(または複数のウェアラブルデバイスがある場合は別のウェアラブルデバイス)であり、携帯電話ではないことになります。正しい方法は、CapabilityApisを使用してメッセージを送信する正しいノードを見つけることです。コードでは、選択したノードのnode.toString()を参照して、クラウドを選択していることを確認して問題が解決されていることを確認します。

チェックこのSO関連チケット:

+0

お返事ありがとうございます。あなたの投稿ごとにCapabilityApisを探しています。私はエミュレータが証明書を心配する必要はないと思っていたが、同じ証明書が各デバイスに使用されていることを確認するよう提案した人を見つけた。 さらに試行錯誤した後、私は 'getConnectedNodes'が正しいメソッドであり、メッセージを正しく送信しているようですが、ウェアアプリがそれを受け取っていないと考えています。 –

関連する問題