如何使用Android Wear的DataItem

lam*_*gol 10 android sync android-wear-data-api wear-os

我想在手持设备和可穿戴设备之间同步偏好.我在手持app上实现了示例代码.

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
Run Code Online (Sandbox Code Playgroud)

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

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

我试过在Android的实际Android手持设备和模拟器中穿.我确认他们是通过使用Android Wear应用程序的演示卡连接的.

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

mat*_*ash 19

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

访问先前存储的数据的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();
    }
});
Run Code Online (Sandbox Code Playgroud)

我用过这个,它的确有效.但是,我自己遇到了问题,因为我不知道Uri要访问特定的数据项Wearable.DataApi.getDataItem().所以我发布了这个问题.如果你只是测试,那就DataApi.getDataItems()足够了.

另一种选择是用于DataApi.addListener()通知存储的更改.