轮询ACTION_BATTERY_LOW

时间:2012-06-19 15:10:55

标签: android battery

当电池电量不足时,Android会发送ACTION_BATTERY_LOW意图。然后当它再次没问题时,它会发送ACTION_BATTERY_OKAY。

不幸的是,如果我的应用程序启动电池电量不足,那么我就不会收到意图;它不粘,所以我无法检测电池警报是否存在。 ACTION_BATTERY_CHANGED 是粘性的,但它只告诉我当前的电池充电状态,而不是系统是否已宣布低电量警报。

有没有办法在任何特定时刻检测电池电量是否低?

3 个答案:

答案 0 :(得分:2)

这是一个非常棘手的问题.Android Developer上的相关代码有误。

基本上,您可以在此链接上学习如何检测它:

https://developer.android.com/training/monitoring-device-state/battery-monitoring.html

您可以使用方法OnReceive(上下文上下文,意图意图){}

来检测广播接收器是否正在充电或未充电和电池电量不足

但是,此链接中存在错误,用于监控重大更改。[请注意,操作名称为android.intent.action.ACTION_BATTERY_LOW]

[1]

但是,让我们看看它是如何在意图中描述的。

ACTION_BATTERY_LOW

在API级别1中添加 字符串ACTION_BATTERY_LOW 广播操作:表示设备电池电量不足。此广播对应于"低电量警告"系统对话框。

这是受保护的意图,只能由系统发送。

常量值:" android.intent.action.BATTERY_LOW" 您可以在Android Developers Intent。

中找到它

换句话说,这里发生了一个错误。它应该是action.BATTERY_LOW而不是action.ACTION_BATTERY_LOW。所以AndroidManifest中的代码应该是:

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

            <!--instead of android.intent.action.ACTION_BATTERY_LOW-->
        </intent-filter>
    </receiver>

还要确保您的接收器正确无误。

public class BatteryLevelReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {

        Toast.makeText(context, "BAttery's dying!!", Toast.LENGTH_LONG).show();
        Log.e("", "BATTERY LOW!!");

}

}

难以调试或登录笔记本电脑,使用Toast可能会有所帮助。

        Toast.makeText(context, "BAttery's dying!!", Toast.LENGTH_LONG).show();
        //Toast.makeText(Context context, String str, Integer integer).show();

希望它有助于解决您的问题。

答案 1 :(得分:1)

通常低电量警告出现在15%,因此您可以检查电池电量是否等于或低于15%。

答案 2 :(得分:1)

粘性意图中仍然包含一些信息。 您仍然可以获得电池电量

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

float batteryPct = level / (float)scale;

取自http://developer.android.com/training/monitoring-device-state/battery-monitoring.html