本文介紹了Wear OS瓷磚是如何每秒自我更新的?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我已經做了一個瓷磚,應該可以顯示當前的心率。磁貼從共享的偏好中獲取心率,它工作得很好,但我需要像每一秒一樣刷新它。目前我只能使用.setFreshnessIntervalMillis(1000*60)
每分鐘刷新一次
文檔說我可以使用此命令從應用程序中的任何位置更新我的磁貼…
TileService.getUpdater(context)
.requestUpdate(HeartRateTileService.class);
但這沒有任何作用。我在幾個地方嘗試了它,比如在我的MainActivity中的onItemSelected中,在BroadCastReceiver中和在前臺服務中。這是背景問題還是什么?我也試過
HeartRateTileService.getUpdater(this/getApplicationContext())
.requestUpdate(HeartRateTileService.class);
這是我的磁貼…
public class HeartRateTileService extends TileService {
private static final String RESOURCES_VERSION = "1";
private String currentHeartrate = "0";
private PrefManager prefManager;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
int i = super.onStartCommand(intent, flags, startId);
Log.d("HeartRate", "onStartCommand " + prefManager.getHeartrate());
return i;
}
@Override
public void onCreate() {
super.onCreate();
prefManager = new PrefManager(this);
Log.d("HeartRate", "onCreate " + prefManager.getHeartrate());
}
@NonNull
@Override
protected ListenableFuture<TileBuilders.Tile> onTileRequest(
@NonNull RequestBuilders.TileRequest requestParams
) {
Log.d("HeartRate", "onTileRequest " + prefManager.getHeartrate());
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(
layoutHeartRate()
).build()
).build()
).build()
).build()
);
}
private LayoutElementBuilders.LayoutElement layoutPlay() {
return new LayoutElementBuilders.Box.Builder()
.setWidth(wrap())
.setHeight(expand())
.setVerticalAlignment(LayoutElementBuilders.VERTICAL_ALIGN_CENTER)
.addContent(new LayoutElementBuilders.Row.Builder()
.addContent(
IconButton.buildIconButton(
this,
"ic_play",
R.color.colorAccent,
"start measuring heart rate",
new ModifiersBuilders.Clickable.Builder()
.setOnClick(new ActionBuilders.LaunchAction.Builder()
.setAndroidActivity(new ActionBuilders.AndroidActivity.Builder()
.setClassName(MainActivity.class.getName())
.setPackageName(this.getPackageName())
.build()
).build()
)
.build()
)
).build()
)
.build();
}
private LayoutElementBuilders.LayoutElement layoutHeartRate() {
prefManager = new PrefManager(this);
currentHeartrate = prefManager.getHeartrate();
return new LayoutElementBuilders.Box.Builder()
.setWidth(wrap())
.setHeight(expand())
.setVerticalAlignment(LayoutElementBuilders.VERTICAL_ALIGN_CENTER)
.addContent(new LayoutElementBuilders.Row.Builder()
.addContent(
IconButton.buildIconButton(
this,
"",
R.color.colorAccent,
"start measuring heart rate",
new ModifiersBuilders.Clickable.Builder()
.setOnClick(new ActionBuilders.LaunchAction.Builder()
.setAndroidActivity(new ActionBuilders.AndroidActivity.Builder()
.setClassName(MainActivity.class.getName())
.setPackageName(this.getPackageName())
.build()
).build()
)
.build()
)
).build()
)
.addContent(new LayoutElementBuilders.Text.Builder()
.setText(prefManager.getHeartrate())
.build()
)
.build();
}
@NonNull
@Override
protected ListenableFuture<ResourceBuilders.Resources> onResourcesRequest(
@NonNull RequestBuilders.ResourcesRequest requestParams
) {
Log.d("HeartRate", "onResourcesRequest " + prefManager.getHeartrate());
return Futures.immediateFuture(new ResourceBuilders.Resources.Builder()
.setVersion(RESOURCES_VERSION)
.addIdToImageMapping("ic_play", new ResourceBuilders.ImageResource.Builder()
.setAndroidResourceByResId(new ResourceBuilders.AndroidImageResourceByResId.Builder()
.setResourceId(R.drawable.ic_play)
.build()
).build()
)
.build()
);
}
}
推薦答案
最短時間為20秒。
參見https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/manager/UpdateScheduler.java;l=31?q=20%20f:androidx%2Fwear%2Ftiles&start=51
@VisibleForTesting static final long MIN_INTER_UPDATE_INTERVAL_MILLIS = SECONDS.toMillis(20);
這篇關于Wear OS瓷磚是如何每秒自我更新的?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,