在广播接收器响应 Intent.ACTION_BATTERY_CHANGED 之前获取电池电量

2024-05-01

我的程序中有一个广播接收器,可以对电池电量做出反应,如下所示:

private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver(){
    @Override
    public void onReceive(Context arg0, Intent intent) {
        int level = intent.getIntExtra("level", 0);
        // do something...
    }
}

    registerReceiver(this.mBatInfoReceiver, 
            new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

但是,此代码必须等待电池状态更新,因此如果您有一个需要根据电池电量设置的 GUI 元素,则它必须等待电池事件发生。有没有办法推动它使其正常工作,或者简单地运行一些代码来查看上次广播的电池电量?


这是在不注册接收器的情况下获取电池电量的方法:

Intent batteryIntent = context.getApplicationContext().registerReceiver(null,
                    new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
int rawlevel = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
double scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
double level = -1;
if (rawlevel >= 0 && scale > 0) {
    level = rawlevel / scale;
}

由于广播的粘性性质,它可以使用空的 BroadcastReceiver。

它使用 getApplicationContext() 技巧,以防您处于意图接收器中并收到异常:

android.content.ReceiverCallNotAllowedException: IntentReceiver 组件不是 允许注册接收 意图

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在广播接收器响应 Intent.ACTION_BATTERY_CHANGED 之前获取电池电量 的相关文章

随机推荐