当电池电量变低时,安卓将发送一个ACTION_BATTERY_LOW意图。然后当它再次好的时候,它会发送ACTION_BATTERY_OKAY。
不幸的是,如果我的应用程序是在电池不足的时候启动的,那么我就不会收到它的意图;它不粘,所以我无法检测当前是否存在电池警报。ACTION_BATTERY_CHANGED是粘性的,但它只告诉我当前的电池充电状态,而不是系统是否已经宣布了低电池警报。
是否有任何方法来检测电池是否在任何特定时刻都是低的?
发布于 2016-07-06 22:12:51
这是一个非常棘手的question.The相关代码,安卓开发者有一个错误。
基本上,您可以学习如何在这个链接中检测到它:
https://developer.android.com/training/monitoring-device-state/battery-monitoring.html
您可以使用方法OnReceive(上下文、意图){},通过广播接收器检测它是否正在充电和低电池。
但是,在这个链接中有一个错误,为了在这里监视重要的changes.Notice,操作名是android.intent.action.ACTION_BATTERY_LOW。
1
但让我们看看它是如何被描述的意图。
ACTION_BATTERY_LOW
在API 1字符串ACTION_BATTERY_LOW广播操作中添加:指示设备上的低电池状态。此广播对应于“低电池警告”系统对话框。
这是一个受保护的意图,只能由系统发送。
常数值:"android.intent.action.BATTERY_LOW“--你可以在安卓开发者的意图中找到这一点。
换句话说,这里发生了一个错误。它应该是action.BATTERY_LOW而不是action.ACTION_BATTERY_LOW.So,您在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();
希望它能帮你解决问题。
发布于 2012-06-19 15:32:55
通常低电量警告出现在15%,所以您可以检查电池水平是否等于或低于15%。
发布于 2012-06-19 15:38:25
粘稠的意图里面仍然有一些信息。你应该还能得到电池的电量
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
https://stackoverflow.com/questions/11103969
复制相似问题