首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >轮询ACTION_BATTERY_LOW

轮询ACTION_BATTERY_LOW
EN

Stack Overflow用户
提问于 2012-06-19 15:10:54
回答 3查看 2.7K关注 0票数 4

当电池电量变低时,安卓将发送一个ACTION_BATTERY_LOW意图。然后当它再次好的时候,它会发送ACTION_BATTERY_OKAY。

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

是否有任何方法来检测电池是否在任何特定时刻都是低的?

EN

回答 3

Stack Overflow用户

发布于 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中的代码应该是:

代码语言:javascript
运行
复制
<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>

还要确保你的接收器是正确的。

代码语言:javascript
运行
复制
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可能会有所帮助。

代码语言:javascript
运行
复制
        Toast.makeText(context, "BAttery's dying!!", Toast.LENGTH_LONG).show();
        //Toast.makeText(Context context, String str, Integer integer).show();

希望它能帮你解决问题。

票数 2
EN

Stack Overflow用户

发布于 2012-06-19 15:32:55

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

票数 1
EN

Stack Overflow用户

发布于 2012-06-19 15:38:25

粘稠的意图里面仍然有一些信息。你应该还能得到电池的电量

代码语言:javascript
运行
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11103969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档