【问题标题】:Android wear data layer PutDataMapRequest doesn't workAndroid磨损数据层PutDataMapRequest不起作用
【发布时间】:2015-12-17 07:50:46
【问题描述】:

我正在尝试实现 android wear 应用程序。我想我不明白什么,因为我的测试项目表现得很奇怪。这是一个非常简单的项目 - 在移动设备上带有两个按钮(“发送地图”和“发送消息”)的活动和在可穿戴设备上的 WearableListenerService,它在收到数据时创建通知。

现在,当我尝试通过 Wearable.DataApi 发送数据时,可穿戴设备没有任何反应 - 数据已发送,但可穿戴设备没有任何反应(可穿戴设备一直与移动设备结合使用)。我尝试等待 10-15 分钟,但仍然没有。但是,如果我随后通过 MessageApi 发送数据,则消息会立即传递,并且我通过 DataApi 发送的所有数据项都会在那时收到。

当我尝试使用 DataApi(DataLayer 或 Quiz)的 google 示例时,数据项似乎几乎是立即交付的,但几乎所有这些示例都使用 DataApi 和 MessageApi。

另外,如果我在发送数据项后启动其中一个示例,我发送的所有项目也会被发送。

所以我想我的问题是:是我的代码中的错误导致数据项无法交付吗?或者它应该像这样工作并且数据项只是在设备上累积,并且每隔一个小时左右就会发生实际交换,并且发送消息是触发立即传递的唯一方法?

这是我的数据项发送代码:

String data = String.valueOf(System.currentTimeMillis());
PutDataMapRequest pdmr = PutDataMapRequest.create("/wear_test/"+data);
pdmr.getDataMap().putString("1", data);

PutDataRequest pdr = pdmr.asPutDataRequest();

Wearable.DataApi.putDataItem(googleApiClient,pdr);

这里是监听服务代码:

public class ListenerService extends WearableListenerService {
    private static final String TAG = ListenerService.class.getSimpleName();

    @Override
    public void onCreate() {
        super.onCreate();
        Log.e(TAG, "Service created");
    }



    @Override
    public void onDataChanged(DataEventBuffer dataEvents) {
        super.onDataChanged(dataEvents);
        Log.e(TAG, "onDataChanged(DataEventBuffer dataEvents) is called");


        for (DataEvent dataEvent : dataEvents) {
            Log.e(TAG, "Event type: "+dataEvent.getType()+", Uri:'"+dataEvent.getDataItem().getUri());
            if(dataEvent.getType()==DataEvent.TYPE_CHANGED && dataEvent.getDataItem().getUri().getPath().contains("/wear_test")){
                DataMap dataMap = DataMapItem.fromDataItem(dataEvent.getDataItem()).getDataMap();
                String data = dataMap.getString("1");
                Log.e(TAG, "Data received: " + data);

                createNotification(data,505, "data map");
            }
        }
    }

    @Override
    public void onMessageReceived(MessageEvent messageEvent) {
        super.onMessageReceived(messageEvent);
        if (messageEvent.getPath().contains("wear_test")){
            String messageStr = new String(messageEvent.getData(), Charset.forName("UTF-8"));
            Log.e(TAG, "Message received:"+messageStr);
            createNotification(messageStr,808, "message");
        }
    }

    private void createNotification(String data, int notificationCode, String suffix){
        Notification notification = new Notification.Builder(this)
                .setTicker(data)
                .setSmallIcon(R.drawable.common_google_signin_btn_icon_light)
                .setContentText(data+"\n"+suffix)
                .setSubText(data+"\n"+suffix)
                .build();

        ((NotificationManager) getSystemService(NOTIFICATION_SERVICE))
                .notify(notificationCode, notification);
    }
}

【问题讨论】:

  • 你能把你连接到可穿戴设备上DataApi的代码贴出来吗?
  • @TofferJ 添加了监听服务代码。我实际上并没有连接到可穿戴设备上的 DataApi,只是创建通知。

标签: android wear-os


【解决方案1】:

我遇到了同样的问题。我使用PutDataRequest.setUrgent() 解决了它。

来自文档:

DataItems 将延迟不超过 30 分钟,取决于连接的对等方,但预计会更快到达。 客户端应该只为需要立即交付的 DataItems setUrgent()。

【讨论】:

  • 谢谢!这帮助很大。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-21
  • 1970-01-01
相关资源
最近更新 更多