使用Android SDK只能获得一次电池电量

时间:2013-04-01 15:50:59

标签: android batterylevel

我在网上搜索过,无法找到问题的答案。我的问题是只获得一次电池电量信息,例如。调用函数getBatteryLevel()。只有使用BroadcastReceiver实现的解决方案,但据我所知,每次电池级别的更改事件都会调用它。请告诉我如何才能获得该信息一次?

1 个答案:

答案 0 :(得分:97)

Intent.ACTION_BATTERY_CHANGED广播就是所谓的“粘性广播”。由于这是粘性的,您可以使用空接收器注册广播,当您拨打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类中列出的其他附加内容。