我想在手表表面显示当前手表电池电量。虽然该值只确定一次,然后正确显示在我的手表表面,但该值永远不会更新。要显示新值,唯一的方法是通过Android Studio重新安装APK,或者先选择另一个手表面。
我想我严格遵循了教程代码。以下是我的
CanvasWatchFaceService.Engine
类别:
inner class Engine : CanvasWatchFaceService.Engine() {
private lateinit var batteryBroadcastReceiver: BroadcastReceiver
private lateinit var batteryStatus: Intent
private var watchBatteryLevel: Int = -1
override fun onCreate(holder: SurfaceHolder) {
super.onCreate(holder)
setWatchFaceStyle(WatchFaceStyle.Builder(this@MyWatchFaceService)
.setAcceptsTapEvents(true)
.build())
val intentFilter = IntentFilter(Intent.ACTION_BATTERY_CHANGED)
batteryBroadcastReceiver = object: BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
watchBatteryLevel = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1)
invalidate()
}
}
batteryStatus = registerReceiver(batteryBroadcastReceiver, intentFilter)
}
override fun onDestroy() {
mUpdateTimeHandler.removeMessages(MSG_UPDATE_TIME)
unregisterReceiver(batteryBroadcastReceiver)
super.onDestroy()
}
override fun onDraw(canvas: Canvas, bounds: Rect) {
val batteryText = String.format("%d %%", watchBatteryLevel)
canvas.drawText(batteryText, width * 0.5f, width * 0.15f, mBatteryPaint)
}
}