Fre*_*ude 3 android power-management android-intent
我在这里遇到了一个小问题.
我希望我的应用程序能够执行某些操作,但仅限于电池电量为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
}
}
}
Run Code Online (Sandbox Code Playgroud)
ACTION_BATTERY_LOW
没有你想从中读取其它功能,所以你要percent
为-1
每一次.
作为@bimal暗示,这些附加功能都连接到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
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,registerReciever()
使用null
BroadcastReceiver 调用,因此您不必担心取消注册.这是一个很好,干净的方式,只是说"现在的电池状态是什么?" (当然,从技术上说,这是什么是它广播发送最后一次.)
归档时间: |
|
查看次数: |
3406 次 |
最近记录: |