gpt4 book ai didi

android - 使用数据 API 更改来更新表盘 UI

转载 作者:行者123 更新时间:2023-11-29 00:13:49 25 4
gpt4 key购买 nike

我在表盘中的 Android Wear 服务中使用数据 API,该表盘从手机应用中的云端提取数据,并通过 DataMap 将其同步到配对的 watch 应用。但我对如何在可穿戴端获得服务以正确收听更新并重绘其 UI 有点迷茫。我应该从同一个服务做这一切吗?

我尝试在扩展 CanvasWatchFaceService.Engine 的私有(private)内部类中实现 DataApi.DataListener 方法,但这似乎不起作用。

@Override
public Engine onCreateEngine() {
return new Engine();
}

private class Engine extends CanvasWatchFaceService.Engine implements DataApi.DataListener {

// other events and methods...

@Override
public void onDataChanged(DataEventBuffer dataEvents) {
for(DataEvent event : dataEvents) {
DataItem dataItem = event.getDataItem();
if(PATH.equals(dataItem.getUri().getPath())) {
DataMap dataMap = DataMapItem.fromDataItem(dataItem).getDataMap();
downloadedTrends = dataMap.getString(DATAMAP_KEY);
}
}
}

@Override
public void onDraw(Canvas canvas, Rect bounds) {
// use the changed data here to update the watch face UI
}
}

我是否应该使用扩展 WearableListenerService 的单独服务,如果是这样,我如何在表盘服务的 onDraw 中提取数据?我可以在回调之外直接点击 DataEventBuffer 吗?

我还认为它可能与 list 中的 BIND_LISTENER Intent 过滤器有关,因为我是在私有(private)内部类上实现它。

感谢您的帮助!

最佳答案

您应该将这两个服务分开。表盘服务绘制表盘,数据api服务处理数据项变化。

现在,您需要以某种方式将它们连接起来。有几种方法。我将从实际的、非常丑陋的开始:你的数据 api 服务有一个公共(public)的、静态的接口(interface),其他组件可以通过它注册“监听器”并获取有关数据更改的信息。只要你在同一个进程中,一切都很好。当您的表盘引擎创建时,它会将自己注册为监听器,当它被销毁时,它会自行注销。

还有其他选择。您的数据 api 服务可以发送广播,当它收到新的数据项并且表盘可以收听它们时。它可以包含内部数据,也可以让内容提供者由数据项支持(在这种情况下,内容提供者将从数据 api 服务接收广播,表盘将在该提供者上有一个内容观察者)。

这些方法是否适合您的需求?

关于android - 使用数据 API 更改来更新表盘 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28058284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com