确定没有线程但带接收器的电池电量

时间:2014-05-12 05:52:18

标签: android batterylevel

在我的应用程序中,我想在低于30%,20%和10%的电池电量下执行一些操作。 用户可以选择上述任何一种电池电量来执行操作。

我的问题是,如何确定电池电量 30%或20%或10%才能完成我的工作?

我已在清单文件中注册了电池广播接收器,如下所示。

<receiver android:name=".BatteryLevelReceiver">
   <intent-filter>
      <action android:name="android.intent.action.ACTION_BATTERY_LOW"/>
      <action android:name="android.intent.action.ACTION_BATTERY_OKAY"/>
   </intent-filter>
</receiver>

但我不知道我的接收器类什么时候(在什么电池级别上)会收到它? 或以其他方式何时触发ACTION_BATTERY_LOW意图(在什么电池级别)?

请帮忙!

2 个答案:

答案 0 :(得分:0)

请检查this answer

上面这部分答案应该回答你的问题:

mLowBatteryWarningLevel = mContext.getResources().getInteger(
            com.android.internal.R.integer.config_lowBatteryWarningLevel);

它会告诉你这个设备的特定阈值,但是你无法改变它!

答案 1 :(得分:0)

请参阅documentation

您可以注册一个ACTION_BATTERY_CHANGED接收器,并读出附加内容,例如:

int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);

float batteryPct = level / (float)scale;

然后,您可以在batteryPct上采取行动,无论是10%,20%,30%。

if( batteryPct <= 10 ) {
    // do 10% actions
} else if( batteryPct <= 20 ) {
    // do 20% actions
} else if( batteryPct <= 30 ) {
    // do 30% actions
} else {
    // do nothing
}

一定要记下你做过的事情,所以你不要继续做这些事情,不论是10%,9%,8%等等。