This question already has answers here:
Get battery level before broadcast receiver responds for Intent.ACTION_BATTERY_CHANGED

(6个答案)


7年前关闭。




我在网上搜索上找不到答案,我的问题。我的问题是让电池电量信息只有一次,如。调用函数getBatteryLevel()。只有被使用BroadcastReceiver实现的解决方案,但我知道它会被称为对电池电量的变化事件每次。请告诉我如何只能一次获得该信息?

最佳答案

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 类概述您可以访问其他附加功能。

关于android - 获取电池电量只有一次使用Android SDK [复制],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15746709/

10-10 06:20