电池电量代码-如何放置在onCreate和onDraw中

时间:2019-01-29 22:58:36

标签: java android wear-os

为了显示Wear OS上的电池电量,我尝试了许多方法,但是我仍然缺少一些要点,这使我无法解决问题。

在其中一个答案(Get battery level and state in Android)中,我找到了以下代码:

public static float getBatteryLevel(Context context, Intent intent) {
Intent batteryStatus = context.registerReceiver(null,
        new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
int batteryLevel = -1;
int batteryScale = 1;
if (batteryStatus != null) {
    batteryLevel = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, batteryLevel);
    batteryScale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, batteryScale);
}
return batteryLevel / (float) batteryScale * 100;}

出于明显的原因,我无法将其放入onCreate()方法中,因为它具有return语句。另外,我不应该将其放入onDraw()方法中,以免计算过多。

我到底应该在哪里放置此代码以使其起作用?

1 个答案:

答案 0 :(得分:0)

谢谢你的建议。经过几个小时的测试,我想到了一个不同的想法。因此,如果有人遇到同样的问题,下面的解决方案对我有用,因此值得尝试。 我将代码放在onCreateEngine()中,并将结果存储在一个变量中,然后在onDraw()方法中,我只需要使用此变量来表示所需的电池电量即可。

@Override
public Engine onCreateEngine() {

    //Battery

    getApplicationContext().registerReceiver(new BroadcastReceiver() {
        @Override
        public void onReceive(Context battContext, Intent battIntent) {
            batteryLevel = (int) (100 * battIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) / ((float) (battIntent.getIntExtra(BatteryManager.EXTRA_SCALE, -1))));
            calcBatteryAngle();
        }
    }, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

    //Battery

    return new Engine();
}

到目前为止,如果接下来的几天内发生任何更改,以上代码对我仍然有效,我将更新此帖子。