如何使用Android Wear的DataItem

时间:2014-07-06 12:11:05

标签: android sync wear-os android-wear-data-api

我想在手持设备和可穿戴设备之间同步偏好。我在掌上电脑上实施了sample code

PutDataMapRequest dataMap = PutDataMapRequest.create("/count");
dataMap.getDataMap().putInt(COUNT_KEY, count++);
PutDataRequest request = dataMap.asPutDataRequest();
PendingResult<DataApi.DataItemResult> pendingResult = Wearable.DataApi
    .putDataItem(mGoogleApiClient, request);
System.out.println(dataMap.getDataMap().getInt("COUNT_KEY"));//print 3

然后在可穿戴应用上实现以下代码。但是无法检索已保存的计数。

 PutDataMapRequest dataMap = PutDataMapRequest.create("/count");
 int count = dataMap.getDataMap().getInt("COUNT_KEY");
 System.out.println(count);//print 0

我试过Android的实际Android手持设备和Android的模拟器。我确认他们使用Android Wear app的演示卡进行连接。

我需要更多或者我误解了什么?

1 个答案:

答案 0 :(得分:19)

使用该代码,您尝试创建第二个放置请求,而不是读取先前存储的数据。这就是为什么它是空的。

访问以前存储的数据的方法是使用DataApi方法。例如,您可以使用Wearable.DataApi.getDataItems()获取所有存储的数据:

PendingResult<DataItemBuffer> results = Wearable.DataApi.getDataItems(mGoogleApiClient);
results.setResultCallback(new ResultCallback<DataItemBuffer>() {
    @Override
    public void onResult(DataItemBuffer dataItems) {
        if (dataItems.getCount() != 0) {
            DataMapItem dataMapItem = DataMapItem.fromDataItem(dataItems.get(0));

            // This should read the correct value.
            int value = dataMapItem.getDataMap().getInt(COUNT_KEY);
        }

        dataItems.release();
    }
});

我已经使用了这个并且它有效。但是,我自己也遇到了问题,因为我不知道Uri要使用Wearable.DataApi.getDataItem()访问特定的数据项。所以我发布了this question。如果您只是进行测试,DataApi.getDataItems()就足够了。

另一个选择是使用DataApi.addListener()通知存储更改。