当电池电量不足时,Android会发送ACTION_BATTERY_LOW意图。然后当它再次没问题时,它会发送ACTION_BATTERY_OKAY。
不幸的是,如果我的应用程序启动而电池电量不足,那么我就不会收到意图;它不粘,所以我无法检测电池警报是否存在。 ACTION_BATTERY_CHANGED 是粘性的,但它只告诉我当前的电池充电状态,而不是系统是否已宣布低电量警报。
有没有办法在任何特定时刻检测电池电量是否低?
答案 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