首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有办法抑制Android设备上的电池电量不足警告或关闭警报弹出窗口?

有没有办法抑制Android设备上的电池电量不足警告或关闭警报弹出窗口?
EN

Stack Overflow用户
提问于 2011-06-10 18:49:16
回答 1查看 3.5K关注 0票数 5

我们正在开发一款Android应用程序,该应用程序将在配备大电池的设备上运行,以便提供更长的充电间隔时间。

问题是操作系统无法正确读取电池的电量,并在电池电量不足时显示电池电量不足警报。

我们在一次电池充电中使用设备的时间较长,大约每4小时就会出现一次电池电量不足的警报。

有没有办法在不启动设备的情况下阻止此警报出现?是否可以截获电池状态的广播并阻止系统对其做出响应?或者,我们可以做些什么,在电池警告显示后立即解除它?

到目前为止,我们的研究没有发现任何结果,因为我们怀疑,出于安全原因,这是不可能的。希望你们中的一位Android专家能证实/否认我们的怀疑。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-10 19:30:22

让我们深入研究一下android的源代码:

BatteryService

当电池电量不足时,有一个BatteryService负责检测,如果发生这种情况,它会发送相应的广播。检测电池电量是否不足的确切位置可以在here找到。

代码语言:javascript
运行
复制
/* The ACTION_BATTERY_LOW broadcast is sent in these situations:
 * - is just un-plugged (previously was plugged) and battery level is
 *   less than or equal to WARNING, or
 * - is not plugged and battery level falls to WARNING boundary
 *   (becomes <= mLowBatteryWarningLevel).
 */
final boolean sendBatteryLow = !plugged
    && mBatteryStatus != BatteryManager.BATTERY_STATUS_UNKNOWN
    && mBatteryLevel <= mLowBatteryWarningLevel
    && (oldPlugged || mLastBatteryLevel > mLowBatteryWarningLevel);

...
if (sendBatteryLow) {
        mSentLowBatteryBroadcast = true;
        statusIntent.setAction(Intent.ACTION_BATTERY_LOW);
        mContext.sendBroadcast(statusIntent);
}

如果不重新构建Android操作系统,您将无法修改此行为。您可能会更改mLowBatteryWarningLevel的值,因为它取自com.android.internal.R.integer.config_lowBatteryWarningLevel资源。但这需要root用户,并且会使该资源所在的包的签名无效。

StatusBarPolicy

所以我们现在知道当击球率变低时BatteryService会发送广播。但从源代码中可以清楚地看出,它没有显示警告。因此,下一步是找出谁真正显示了“电池电量不足”的警告。负责此操作的类是StatusBarPolicy。它没有记录在案。您可能会感兴趣的两段代码是onBatteryLow()showLowBatteryWarning()函数。

但这两个函数在外部世界中没有合理的影响点。所以这里也不会有黑客帮到你。

因此,如果没有root,这看起来是不可能的。即使你有root用户,这也很有挑战性,因为你需要修改资源或代码(然后重新签名)。

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

https://stackoverflow.com/questions/6305286

复制
相关文章

相似问题

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