备案 增加网站,搜索百度一下,太原市建设工程质量监督站网站,易企秀h51、讲在最前面
系统rom定制开发中#xff0c;其中在低电量时#xff0c;系统会自动关机#xff0c;这个和不同的平台和底层驱动和硬件都有关系#xff0c;需要结合这些来实际调整这个值#xff0c;我们可以通过分析源码中电池服务的代码#xff0c;然后进行修改如何实现…1、讲在最前面
系统rom定制开发中其中在低电量时系统会自动关机这个和不同的平台和底层驱动和硬件都有关系需要结合这些来实际调整这个值我们可以通过分析源码中电池服务的代码然后进行修改如何实现这个功能。
2、系统中framework修改低电量关机值的核心类
frameworks\base\services\core\java\com\android\server\BatteryService.javaprivate final class HealthHalCallback extends IHealthInfoCallback.Stubimplements HealthServiceWrapper.Callback {Override public void healthInfoChanged(android.hardware.health.V2_0.HealthInfo props) {BatteryService.this.update(props);}private void update(android.hardware.health.V2_0.HealthInfo info) {traceBegin(HealthInfoUpdate);Trace.traceCounter(Trace.TRACE_TAG_POWER, BatteryChargeCounter,info.legacy.batteryChargeCounter);Trace.traceCounter(Trace.TRACE_TAG_POWER, BatteryCurrent,info.legacy.batteryCurrent);synchronized (mLock) {mRealBatteryLevel info.legacy.batteryLevel;if (!mUpdatesStopped) {mHealthInfo info.legacy;// Process the new values.processValuesLocked(false);mLock.notifyAll(); // for any waiters on new info} else {copy(mLastHealthInfo, info.legacy);}}traceEnd();}private void processValuesLocked(boolean force) {boolean logOutlier false;long dischargeDuration 0;mBatteryLevelCritical mHealthInfo.batteryStatus ! BatteryManager.BATTERY_STATUS_UNKNOWN mHealthInfo.batteryLevel mCriticalBatteryLevel;if (mHealthInfo.chargerAcOnline) {mPlugType BatteryManager.BATTERY_PLUGGED_AC;} else if (mHealthInfo.chargerUsbOnline) {mPlugType BatteryManager.BATTERY_PLUGGED_USB;} else if (mHealthInfo.chargerWirelessOnline) {mPlugType BatteryManager.BATTERY_PLUGGED_WIRELESS;} else {mPlugType BATTERY_PLUGGED_NONE;}if (DEBUG) {Slog.d(TAG, Processing new values: info mHealthInfo , mBatteryLevelCritical mBatteryLevelCritical , mPlugType mPlugType);}// Let the battery stats keep track of the current level.try {mBatteryStats.setBatteryState(mHealthInfo.batteryStatus, mHealthInfo.batteryHealth,mPlugType, mHealthInfo.batteryLevel, mHealthInfo.batteryTemperature,mHealthInfo.batteryVoltage, mHealthInfo.batteryChargeCounter,mHealthInfo.batteryFullCharge);} catch (RemoteException e) {// Should never happen.}...
}private void shutdownIfNoPowerLocked() {// shut down gracefully if our battery is critically low and we are not powered.// wait until the system has booted before attempting to display the shutdown dialog.if (shouldShutdownLocked()) {/*SPRD : add power debug log start*/Slog.d(TAG, Low battery shutdown, batteryLevel : mHealthInfo.batteryLevel);/*SPRD : add power debug log end*/mHandler.post(new Runnable() {Overridepublic void run() {if (mActivityManagerInternal.isSystemReady()) {Intent intent new Intent(Intent.ACTION_REQUEST_SHUTDOWN);intent.putExtra(Intent.EXTRA_KEY_CONFIRM, false);intent.putExtra(Intent.EXTRA_REASON,PowerManager.SHUTDOWN_LOW_BATTERY);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);mContext.startActivityAsUser(intent, UserHandle.CURRENT);}}});}}private boolean shouldShutdownLocked() {if (mHealthInfo.batteryLevel 0) {return false;}// Battery-less devices should not shutdown.if (!mHealthInfo.batteryPresent) {return false;}// add for bug#1021541boolean checkPlugState (mUpdatesStopped mHealthInfo.batteryLevel mSetBatteryLevel mSetBatteryLevel ! mRealBatteryLevel);if (DEBUG) Slog.d(TAG, shutdownIfNoPowerLocked: mUpdatesStopped: mUpdatesStopped mHealthInfo.batteryLevel: mHealthInfo.batteryLevel mSetBatteryLevel: mSetBatteryLevel mRealBatteryLevel: mRealBatteryLevel);return !checkPlugState || mHealthInfo.batteryStatus ! BatteryManager.BATTERY_STATUS_CHARGING;}private boolean shouldShutdownLocked() {
//add startif (mHealthInfo.batteryLevel 2) {return true;}//add endif (mHealthInfo.batteryLevel 0) {return false;}// Battery-less devices should not shutdown.if (!mHealthInfo.batteryPresent) {return false;}// add for bug#1021541boolean checkPlugState (mUpdatesStopped mHealthInfo.batteryLevel mSetBatteryLevel mSetBatteryLevel ! mRealBatteryLevel);if (DEBUG) Slog.d(TAG, shutdownIfNoPowerLocked: mUpdatesStopped: mUpdatesStopped mHealthInfo.batteryLevel: mHealthInfo.batteryLevel mSetBatteryLevel: mSetBatteryLevel mRealBatteryLevel: mRealBatteryLevel);return !checkPlugState || mHealthInfo.batteryStatus ! BatteryManager.BATTERY_STATUS_CHARGING;}经过源码分析如果满足shouldShutdownLocked(),如果满足关机执行 Intent.ACTION_REQUEST_SHUTDOWN 添加 if (mHealthInfo.batteryLevel 2) {return true;}