私は新しいandroid wear comms API、特にWatchアプリケーションにアクティビティとサービス、電話のテストアプリとしてアクティビティを持つMessage APIを使用しようとしています。
通信は両方向で正常に機能しており、時計ハードウェアの再起動直後にのみ発生する 1 つの問題を除いて、電話アプリからメッセージを送信することで、通信を介して時計アクティビティを開始することもできます。
最初に Watch アプリのアクティビティを実行せずに、再起動直後に通信メッセージ呼び出しを介して Watch アプリを起動すると、Watch から返されたメッセージの返信が失われ、電話アプリに表示されません。
再起動後、電話アプリから通信を開始する前に Watch アプリでアクティビティを実行すると、メッセージを送信する前に Watch アクティビティを閉じても、通信メッセージは正常に機能します。
Watch 側の WearableListenerService コードは次のようになります (かなり省略されています)。
public class MyClass extends WearableListenerService
implements MessageApi.MessageListener,
ConnectionCallbacks,
OnConnectionFailedListener
{
...
@Override
public void onCreate()
{
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Wearable.API)
.build();
}
@Override
public void onDestroy()
{
mGoogleApiClient.disconnect();
super.onDestroy();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
int result = super.onStartCommand(intent, flags, startId);
mGoogleApiClient.connect();
return result;
}
@Override
public void onMessageReceived(MessageEvent messageEvent)
{
comms.handleReceivedMessage (messageEvent);
}
public final void txReply(String txMessage, String nodeId)
{
Wearable.MessageApi.sendMessage(mGoogleApiClient,
nodeId,
MESSAGE_RECEIVED_PATH,
txMessage.getBytes());
}
@Override
public void onConnected(Bundle bundle)
{
Wearable.MessageApi.addListener(mGoogleApiClient, this);
}
@Override
public void onConnectionSuspended(int arg0)
{
// TODO Auto-generated method stub
}
@Override
public void onConnectionFailed(ConnectionResult arg0)
{
// TODO Auto-generated method stub
}
}
私の comms.handleReceivedMessage() 関数は上記の txReply() 関数を直接呼び出し、LogCat を使用してデータが正しいことを確認しました。
最初の Watch アプリのメッセージが電話アプリで受信されない原因となっている可能性があるものについて、何か指摘があれば非常にありがたいです。繰り返しますが、この動作は、メッセージを受信する前に Watch App アクティビティが実行されていない場合、再起動直後にのみ発生します。
--編集-- @ マーフィー:
さて、私はあなたのコードを見ましたが、それは私がすでに持っているものとほとんど同じように見えます.実際、私はあなたの呼び出しの代わりに次のものを持っています:
NodeApi.GetConnectedNodesResult nodes = Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).await();
for (Node node : nodes.getNodes())
{
// Send message and wait for result
SendMessageResult result = Wearable.MessageApi.sendMessage(mGoogleApiClient,
node.getId(),
MESSAGE_RECEIVED_PATH,
txm.getBytes()).await();
}
そのため、時計からの通信が失われるという点では大きな違いはありませんが、とにかく助けてくれてありがとう.
よろしく、