我正在编写一个自定义Android Wear应用程序,该应用程序应该向连接的主机设备(电话)发送一次性消息.通过API,我发现以下教程应该运行良好:http://developer.android.com/training/wearables/data-layer/messages.html
我的Android应用程序有一个WearableListenerService,我的Android Wear应用程序使用Message API触发消息.在模拟器基于记录以下方法进行连接时调用WearableListenerService get,所以我很确定该服务连接正常
@Override public void onPeerConnected(Node peer) { super.onPeerConnected(peer); String id = peer.getId(); String name = peer.getDisplayName(); Log.d(LOG_TAG, "Connected peer name & ID: " + name + "|" + id); }
日志输出:
/AndroidWearListenerService(19892): Connected peer name & ID: facdc219-37f5-4326-8fa6-1c8b8d3b6669|facdc219-37f5-4326-8fa6-1c8b8d3b6669
但是,onMessageReceived方法永远不会被触发:
@Override public void onMessageReceived(MessageEvent messageEvent) { Log.d(LOG_TAG, "MessageEvent received: " + messageEvent.getData()); //do work }
这是我的Android Wear代码.我删除了大部分锅炉板代码,只留下必要的位
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); final GoogleApiClient googleApiClient = new GoogleApiClient.Builder(this) .addApi(Wearable.API) .build(); googleApiClient.connect(); final WatchViewStub stub = (WatchViewStub) findViewById(R.id.watch_view_stub); stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() { @Override public void onLayoutInflated(WatchViewStub stub) { fireMessage(); } private void fireMessage() { // Send the RPC PendingResultnodes = Wearable.NodeApi.getConnectedNodes(googleApiClient); nodes.setResultCallback(new ResultCallback () { @Override public void onResult(NodeApi.GetConnectedNodesResult result) { for (int i = 0; i < result.getNodes().size(); i++) { Node node = result.getNodes().get(i); String nName = node.getDisplayName(); String nId = node.getId(); Log.d(TAG, "Node name and ID: " + nName + " | " + nId); Wearable.MessageApi.addListener(googleApiClient, new MessageApi.MessageListener() { @Override public void onMessageReceived(MessageEvent messageEvent) { Log.d(TAG, "Message received: " + messageEvent); } }); PendingResult messageResult = Wearable.MessageApi.sendMessage(googleApiClient, node.getId(), PATH, null); messageResult.setResultCallback(new ResultCallback () { @Override public void onResult(MessageApi.SendMessageResult sendMessageResult) { Status status = sendMessageResult.getStatus(); Log.d(TAG, "Status: " + status.toString()); if (status.getStatusCode() != WearableStatusCodes.SUCCESS) { alertButton.setProgress(-1); label.setText("Tap to retry. Alert not sent :("); } } }); } } }); } }); }
记录似乎表明消息已成功发送,但Android应用程序的WearableListenerService.onMessageReceived永远不会触发.
D/MyWearApp MyActivity( 2014): Node name and ID: a2ba665d-a559-4a95-91d2-c16fc7873e28 | a2ba665d-a559-4a95-91d2-c16fc7873e28 D/MyWearApp MyActivity( 2014): Status: Status{statusCode=SUCCESS, resolution=null}
有任何想法吗?