我的程序中有一个广播接收器,可以对电池电量做出反应,如下所示:
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(使用前将#替换为@)