我在这里遇到了一个小问题。
我希望我的应用程序执行某些操作,但仅限于电池电量为 10% 时。
我的应用程序不会持续监视电池电量;它只是等待 LOW_BATTERY 意图。
如果我不指定级别,它会起作用,但它会起作用 3 次:15%、10% 和 5%
我只希望它以 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
没有您要从中读取的附加内容,因此您会得到percent
as -1
每次。
正如@bimal 暗示的那样,那些额外的东西are附于ACTION_BATTERY_CHANGED
播送。但这并不意味着您只需注册即可接收该信息。ACTION_BATTERY_CHANGED
是粘性的,所以registerReceiver()
立即返回最后一个 Intent。这意味着您可以执行以下操作:
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,这样你就不用担心注销的问题了。这是一种很好、干净的方式来表达“现在电池状态如何?” (嗯,从技术上来说,这就是was上次发送广播时。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)