我在网上搜索并找不到我的问题的答案。我的问题是只获取一次电池电量信息,例如。调用函数getBatteryLevel()
。只有使用 实现的解决方案BroadcastReceiver
,但据我所知,每次电池电量变化事件都会调用它。请告诉我如何才能只获得一次该信息?
问问题
34314 次
1 回答
100
Intent.ACTION_BATTERY_CHANGED
广播就是所谓的“粘性广播” 。因为这是粘性的,所以您可以使用 null 接收器注册广播,它只会在您调用时获得一次电池registerReceiver
电量。
在不接收更新的情况下获取电池电量的函数如下所示:
public float getBatteryLevel() {
Intent batteryIntent = registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
int level = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
// Error checking that probably isn't needed but I added just in case.
if(level == -1 || scale == -1) {
return 50.0f;
}
return ((float)level / (float)scale) * 100.0f;
}
可以从此粘性广播中提取更多数据。使用返回的batteryIntent
,您可以访问BatteryManager
课程中概述的其他附加功能。
于 2013-04-01T16:04:48.353 回答