【发布时间】:2021-12-19 21:07:37
【问题描述】:
我真的不知道如何为我的 Wear OS 磁贴提供数据。目前,我正在尝试从 BroadcastReceiver 接收我的心率,它可以工作,但我的值在 onTileRequest 中始终为 0。
这是我的 TileService...
public class HeartRateTileService extends TileService {
private static final String RESOURCES_VERSION = "1";
private String currentHeartrate = "0";
@Override //onStartCommand never gets called
public int onStartCommand(Intent intent, int flags, int startId) {
int i = super.onStartCommand(intent, flags, startId);
Log.d("HeartRate", "onStartCommand " + currentHeartrate);
LocalBroadcastManager.getInstance(this).registerReceiver(messageReceiver, new IntentFilter("heart-rate-to-activity"));
return i;
}
@Override
public void onCreate() {
super.onCreate();
LocalBroadcastManager.getInstance(this).registerReceiver(messageReceiver, new IntentFilter("heart-rate-to-activity"));
}
@NonNull
@Override
protected ListenableFuture<TileBuilders.Tile> onTileRequest(
@NonNull RequestBuilders.TileRequest requestParams
) {
Log.d("HeartRate", "onTileRequest " + currentHeartrate);
return Futures.immediateFuture(new TileBuilders.Tile.Builder()
.setResourcesVersion(RESOURCES_VERSION)
.setFreshnessIntervalMillis(1000*60)
.setTimeline(new TimelineBuilders.Timeline.Builder()
.addTimelineEntry(new TimelineBuilders.TimelineEntry.Builder()
.setLayout(new LayoutElementBuilders.Layout.Builder()
.setRoot(
layout()
).build()
).build()
).build()
).build()
);
}
private LayoutElementBuilders.LayoutElement layout() {
return new LayoutElementBuilders.Row.Builder()
.setWidth(wrap())
.setHeight(expand())
.setVerticalAlignment(LayoutElementBuilders.VERTICAL_ALIGN_CENTER)
.addContent(new LayoutElementBuilders.Text.Builder()
.setText(currentHeartrate)
.build()
).build();
}
@NonNull
@Override
protected ListenableFuture<ResourceBuilders.Resources> onResourcesRequest(
@NonNull RequestBuilders.ResourcesRequest requestParams
) {
Log.d("HeartRate", "onResourcesRequest " + currentHeartrate);
return Futures.immediateFuture(new ResourceBuilders.Resources.Builder()
.setVersion(RESOURCES_VERSION)
.build()
);
}
private final BroadcastReceiver messageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("HeartRate", "message: " + currentHeartrate);
currentHeartrate = intent.getExtras().getString("message");
}
};
}
这就是我得到的... 如您所见,onTileRequest 始终为 0。可能是因为每当调用 onTileRequest 时也会调用 onCreate,因此此时我的数据为 0。但是我怎样才能永久保存心率呢?难道我做错了什么?或者瓷砖只是不打算接收广播接收器的数据。还有其他方法吗?我真的没有发现任何关于使用互联网上的数据更新磁贴的信息。
I/OpenGLRenderer: Initialized EGL, version 1.4
D/OpenGLRenderer: Swap behavior 2
D/HeartRate: onCreate 0
W/t.myapplicatio: Accessing hidden field Ljava/nio/Buffer;->address:J (light greylist, reflection)
D/HeartRate: onTileRequest 0
D/HeartRate: onResourcesRequest 0
D/ViewRootImpl[MainActivity]: changeCanvasOpacity: opaque=false
D/HeartRate: onCreate 0
D/HeartRate: message: 0
D/HeartRate: message: 0
D/HeartRate: message: 81
D/HeartRate: message: 81
D/HeartRate: onCreate 0
D/HeartRate: message: 81
message: 81
message: 0
D/HeartRate: message: 81
I/chatty: uid=10096(com.pezcraft.myapplication) identical 1 line
D/HeartRate: message: 82
D/HeartRate: message: 72
I/chatty: uid=10096(com.pezcraft.myapplication) identical 1 line
D/HeartRate: message: 72
D/HeartRate: message: 73
I/chatty: uid=10096(com.pezcraft.myapplication) identical 1 line
D/HeartRate: message: 73
D/HeartRate: onCreate 0
D/HeartRate: onTileRequest 0
D/HeartRate: message: 75
I/chatty: uid=10096(com.pezcraft.myapplication) identical 1 line
D/HeartRate: message: 75
message: 0
D/HeartRate: message: 75
I/chatty: uid=10096(com.pezcraft.myapplication) identical 2 lines
D/HeartRate: message: 75
【问题讨论】:
标签: java android wear-os android-wear-2.0 wear-os-tiles