我们正在开发一种Android应用程序,该应用程序将在装有大电池的设备上运行,以便在两次充电之间提供更长的运行时间.
问题是操作系统没有正确读取电池的功率电平,并在剩余电量很大时显示电池电量不足警报.
我们在单次电池充电时长时间使用设备,并且大约每4小时就会显示一次低电量警报.
有没有办法阻止此警报出现而不必根设备?是否可以截取电池状态的广播并阻止系统响应?或者有什么我们可以做的就是在显示时立即解除电池警告?
到目前为止,我们的研究结果都没有发现,因为我们怀疑出于安全原因这是不可能的.希望你们中的一位Android专家可以证实/否认我们的怀疑.
让我们深入了解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,这也很有挑战性,因为你需要修改资源或代码(然后重新签名).
| 归档时间: |
|
| 查看次数: |
3139 次 |
| 最近记录: |