我在表盘中的 Android Wear 服务中使用数据 API,该服务从手机应用程序中的云端提取数据,并通过 DataMap 将其同步到配对的 watch 应用程序。但我对如何让可穿戴端的服务正确监听更新并重新绘制其用户界面有点迷失。我应该通过同一个服务来完成这一切吗?
我尝试在扩展 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),其他组件可以通过该接口(interface)注册“监听器”并获取有关数据更改的信息。只要你们在同一个进程中,一切都很好。当您的表盘引擎创建时,它会将自己注册为监听器,当它被销毁时,它会注销自己。
还有其他选择。当您的数据 API 服务收到新数据项并且表盘可以监听它们时,它可以发送广播。它可以包含内部数据,也可以有一个由数据项支持的内容提供程序(在这种情况下,内容提供程序将接收来自数据 api 服务的广播,并且表盘将在该提供程序上有一个内容观察器)。
这些方法是否适合您的需求?
关于android - 使用数据 API 更改来更新表盘 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28058284/