Android:在电池电量达到定义的水平时执行某些操作 [英] Android : Do something when battery is at a defined level
问题描述
我在这里遇到了一个小问题.
I'm stuck with a little problem here.
我希望我的应用执行某项操作,但仅当电池电量为10%时才能执行.
I want my app to do something, but only when the battery is at 10%.
我的应用无法持续监控电池电量;它只是等待LOW_BATTERY意图.
My app doesn't watch the battery level constantly; it just waits for a LOW_BATTERY intent.
如果我未指定级别,它会起作用,但它会起作用3次:15%,10%和5%
It works if i don't specify a level, but it works 3 times: 15%, 10%, and 5%
我只希望它做10%的事情.
I only want it to do something at 10%.
这是我的代码:
public void onReceive(Context context, Intent intent)
{
if(intent.getAction().equals(ACTION_BATTERY_LOW))
{
int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100);
int percent = (level*100)/scale;
if(percent == 10)
{
// Do Something
}
}
}
推荐答案
ACTION_BATTERY_LOW
没有要尝试从中读取的Extras,因此每次获得percent
作为-1
.
ACTION_BATTERY_LOW
doesn't have the Extras you're trying to read from it, so you're getting percent
as -1
every time.
正如@bimal所暗示的,这些附加内容 附加到ACTION_BATTERY_CHANGED
广播中.但是,这并不意味着您应该注册接收该信息. ACTION_BATTERY_CHANGED
是粘性的,因此registerReceiver()
会立即返回最后一个Intent.这意味着您可以执行以下操作:
As @bimal hinted at, those Extras are attached to the ACTION_BATTERY_CHANGED
Broadcast. That doesn't mean, however, that you should just register to receive that instead. ACTION_BATTERY_CHANGED
is sticky, so registerReceiver()
returns the last Intent immediately. That means you can do something like:
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(ACTION_BATTERY_LOW)) {
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);
int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, 100);
int percent = (level*100)/scale;
if (percent <= 10 && percent > 5) {
// Do Something
}
}
}
请注意,registerReciever()
是通过null
BroadcastReceiver调用的,因此您不必担心注销.这是一个很好的,干净的方法,只说现在的电池状态是什么?". (从技术上讲,这是上次发送广播时的 .)
Note that registerReciever()
was called with a null
BroadcastReceiver, so you don't have to worry about unregistering. This is a nice, clean way to just say "What is the battery status right now?" (Well, technically, it's what was it last time a Broadcast was sent.)
这篇关于Android:在电池电量达到定义的水平时执行某些操作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!