ste*_*ter 41 android battery broadcastreceiver
我的程序中有一个广播接收器,可以像这样对电池电量做出反应:
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));
Run Code Online (Sandbox Code Playgroud)
但是,此代码必须等待更新电池状态,因此如果您有一个需要根据电池电量设置的GUI元素,则必须等待电池事件发生.有没有办法轻推它以使其正常工作或只是运行一些代码来查看最后一次广播的电池电量是多少?
小智 84
这是如何在不注册接收器的情况下获得电池电量:
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;
}
Run Code Online (Sandbox Code Playgroud)
由于广播的粘性,它可以使用null BroadcastReceiver.
它使用getApplicationContext()技巧,以防你在intent接收器中并获得异常:
android.content.ReceiverCallNotAllowedException:不允许IntentReceiver组件注册接收意图
Com*_*are 37
有没有办法轻推它以使其正常工作或只是运行一些代码来查看最后一次广播的电池电量是多少?
你可以叫registerReceiver()你IntentFilter和null BroadcastReceiver得到最后的广播Intent.这是有效的,因为这ACTION_BATTERY_CHANGED是一个所谓的"粘性广播",我在这个StackOverflow问答中更多地描述了它.
public static String batteryLevel(Context context)
{
Intent intent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100);
int percent = (level*100)/scale;
return String.valueOf(percent) + "%";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31531 次 |
| 最近记录: |