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

Aid*_*ery 5 android

我们正在开发一种Android应用程序,该应用程序将在装有大电池的设备上运行,以便在两次充电之间提供更长的运行时间.

问题是操作系统没有正确读取电池的功率电平,并在剩余电量很大时显示电池电量不足警报.

我们在单次电池充电时长时间使用设备,并且大约每4小时就会显示一次低电量警报.

有没有办法阻止此警报出现而不必根设备?是否可以截取电池状态的广播并阻止系统响应?或者有什么我们可以做的就是在显示时立即解除电池警告?

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

ina*_*ruk 8

让我们深入了解android源代码:


BatteryService

有一个BatteryService负责检测何时电池电量低,如果发生这种情况,它会发送适当的广播.可以在此处找到检测电池电量是否低的确切位置.

/* 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);
}
Run Code Online (Sandbox Code Playgroud)

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


StatusBarPolicy

所以我们现在知道,BatteryService当击球手变低时发送广播.但从源代码中可以清楚地看出它没有显示警告.所以下一步是找到谁实际显示"低电量"警告.负责此的班级是StatusBarPolicy.它没有记录.您可能感兴趣的两段代码onBatteryLow()showLowBatteryWarning()功能.

但这两个功能在外部世界没有合理的影响点.所以没有黑客也会帮助你.


所以如果没有root,这似乎是不可能的.即使你有root,这也很有挑战性,因为你需要修改资源或代码(然后重新签名).