BIND_LISTENER弃用后无法接收消息

时间:2016-09-18 18:47:02

标签: android wear-os deprecated

我的应用程序一直运行良好,直到BIND_LISTENER已弃用,我已完成所需的任何更改,但我的应用程序无效。我成功发送了消息,但手机端没有任何消息。

我的穿着代码(发件人):

private static final String WEARABLE_DATA_PATH = "/test/";

protected void sendMessageToHandheld(final String message) {

    final PendingResult<NodeApi.GetConnectedNodesResult> nodes = Wearable.NodeApi.getConnectedNodes(googleApiClient);
    nodes.setResultCallback(new ResultCallback<NodeApi.GetConnectedNodesResult>() {
        @Override
        public void onResult(@NonNull NodeApi.GetConnectedNodesResult result) {
            final List<Node> nodes = result.getNodes();
            if (nodes != null) {
                for (int i = 0; i < nodes.size(); i++) {
                    final Node node = nodes.get(i);
                    Wearable.MessageApi.sendMessage(googleApiClient, node.getId(), WEARABLE_DATA_PATH, message.getBytes()).setResultCallback(
                            new ResultCallback() {
                                @Override
                                public void onResult(@NonNull Result sendMessageResult) {
                                    if (!sendMessageResult.getStatus().isSuccess()) {
                                        Log.i(TAG, "Failed to send message");
                                    } else{
                                        Log.d(TAG, "sendind message to handled: " + node.getDisplayName()
                                                + " - id: " + node.getId()
                                                + " - path: " + WEARABLE_DATA_PATH
                                                + " - message: " + message);
                                    }
                                }
                            }
                    );
                }
            }
        }
    });
}

电话方面的听众服务:

public class ListenerService extends WearableListenerService {

private static final String TAG = "ListenerService";
private static final String WEARABLE_DATA_PATH = "/test/";

public void onMessageReceived(MessageEvent messageEvent) {
    Log.v(TAG, "Test");
}

public void onDataChanged(DataEventBuffer dataEvents) {
    DataMap dataMap;
    Log.v(TAG, "DataMap received from watch: ");
    for (DataEvent event : dataEvents) {

        // Check the data type
        if (event.getType() == DataEvent.TYPE_CHANGED) {
            // Check the data path
            String path = event.getDataItem().getUri().getPath();
            if (path.equals(WEARABLE_DATA_PATH)) {}
            dataMap = DataMapItem.fromDataItem(event.getDataItem()).getDataMap();
            Log.v(TAG, "DataMap received on watch: " + dataMap);
        }
    }
}

}

我的手机清单:

<service
        android:name=".wear_communication.DataLayerListenerService"
        android:enabled="true"
        android:exported="true">
        <intent-filter>

            <action android:name="com.google.android.gms.wearable.DATA_CHANGED" />
            <action android:name="com.google.android.gms.wearable.MESSAGE_RECEIVED" />
            <action android:name="com.google.android.gms.wearable.CAPABILITY_CHANGED" />
            <action android:name="com.google.android.gms.wearable.CHANNEL_EVENT" />

            <data
                android:host="*"
                android:pathPrefix="/test/"
                android:scheme="wear" />
        </intent-filter>
    </service>

1 个答案:

答案 0 :(得分:0)

Sending and Syncing Data

  

可穿戴数据层API是Google Play服务的一部分,可为您的掌上电脑和可穿戴应用提供通信渠道。 API由一组数据对象组成,系统可以通过线路和监听器发送和同步数据对象,通过数据层通知您的应用程序重要事件:

     
      
  • 数据项
  •   
  • 消息
  •   
  • 资产
  •   
  • WearableListenerService(用于服务)
  •   
  • DataListener(用于前台活动)
  •   
  • 频道
  •   

有关Data Layer events以及WearableListenerService的使用以及清单中的标签的更多信息。 Android Studio有一个guide,其中包含如何转换为新API的摘要。 Android Wear示例还显示了使用WearableListenerService的最佳做法,例如DataLayerXYZTouristAttractions。所需的更改非常小,可以在此git diff中查看其中一个示例。

以下是可以帮助您进行可穿戴设备和手持设备通信的相关文档和教程:

这些文档可以帮助您了解如何将BIND_LISTENER替换为新的细粒度意图过滤器API。

希望这有帮助!