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

Kar*_*yan 31 android batterylevel

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

Mic*_*ley 99

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; 
}
Run Code Online (Sandbox Code Playgroud)

可以从此粘性广播中提取更多数据.使用返回的内容,batteryIntent您可以访问BatteryManager课程中列出的其他附加内容.

  • 你不能只使用任何上下文,你需要使用`getApplicationContext()`返回的上下文从另一个接收器中调用`registerReceiver()`.我试过这个并且它有效.这个问题的答案也与你提出的答案非常相似:http://stackoverflow.com/questions/3691579/getting-battery-level-at-android-widget (2认同)