代码之家  ›  专栏  ›  技术社区  ›  ygoe

电池电量从未更新

  •  0
  • ygoe  · 技术社区  · 7 年前

    我想在手表表面显示当前手表电池电量。虽然该值只确定一次,然后正确显示在我的手表表面,但该值永远不会更新。要显示新值,唯一的方法是通过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)
        }
    }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Michael Butscher    7 年前

    电池电量取自 batteryStatus 仅设置一次。从 intent 的参数 onReceive 相反