国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android 8.0 慢充和快充提示語的實現原理

2019-10-22 18:10:57
字體:
來源:轉載
供稿:網友

1. 慢充和快充提示語

/frameworks/base/packages/SystemUI/res-keyguard/values-zh-rCN

中文提示語

<string name="keyguard_plugged_in" msgid="89308975354638682">"正在充電"</string>  <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"正在快速充電"</string>  <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"正在慢速充電"</string>

英文提示語

/frameworks/base/packages/SystemUI/res-keyguard/values

1.快充充電器充電-顯示快速充電字符串

<!-- When the lock screen is showing and the phone plugged in, and the battery is not fully charged, and it's plugged into a fast charger, say that it's charging fast. --> <string name="keyguard_plugged_in_charging_fast">Charging rapidly</string>

2.普通充電電器-顯示充電,該同7.0及其以前特性

<!-- When the lock screen is showing and the phone plugged in, and the battery is not fully charged, say that it's charging. --> <string name="keyguard_plugged_in">Charging</string>

3.電腦端或者筆記本端顯示-緩慢充電

<!-- When the lock screen is showing and the phone plugged in, and the battery is not fully charged, and it's plugged into a slow charger, say that it's charging slowly. --> <string name="keyguard_plugged_in_charging_slowly">Charging slowly</string>

2. 原理

根據當前的最大電壓和電流計算出電流速度,并進行分類為慢速充電,充電,快速充電

2.1 源代碼中的原始數據

•public static final String EXTRA_MAX_CHARGING_CURRENT = “max_charging_current”;•public static final String EXTRA_MAX_CHARGING_VOLTAGE = “max_charging_voltage”;

發送“電池廣播”位置將最大電流和電壓上發應用層,這里主要一些8.1以上新增的數據,7.0以前有這個數據但是framework層沒有使用

frameworks/base/services/core/java/com/android/server/BatteryService.java// 發送電池廣播事件private void sendIntentLocked() {  // Pack up the values and broadcast them to everyone  final Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);  intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY      | Intent.FLAG_RECEIVER_REPLACE_PENDING);.......intent.putExtra(BatteryManager.EXTRA_MAX_CHARGING_CURRENT, mBatteryProps.maxChargingCurrent);intent.putExtra(BatteryManager.EXTRA_MAX_CHARGING_VOLTAGE, mBatteryProps.maxChargingVoltage);

2.2 adb shell 查看linux的文件節點

•獲取當前的電流

adb shell cat /sys/class/power_supply/battery/current_maxadb shell cat /sys/class/power_supply/battery/current_max30000001

•獲取當前的電壓

adb shell cat /sys/class/power_supply/battery/voltage_maxadb shell cat /sys/class/power_supply/battery/voltage_max50000001

•具體源碼

system/core/healthd/BatteryMonitor.cpp#define POWER_SUPPLY_SYSFS_PATH "/sys/class/" POWER_SUPPLY_SUBSYSTEMpath.appendFormat("%s/%s/voltage_max", POWER_SUPPLY_SYSFS_PATH,mChargerNames[i].string());

2.3 上層接收廣播

frameworks/base/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java

重點看 maxChargingMicroAmp 和 maxChargingMicroVolt 的算法規則

private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {    ....    } else if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {        final int status = intent.getIntExtra(EXTRA_STATUS, BATTERY_STATUS_UNKNOWN);        final int plugged = intent.getIntExtra(EXTRA_PLUGGED, 0);        final int level = intent.getIntExtra(EXTRA_LEVEL, 0);        final int health = intent.getIntExtra(EXTRA_HEALTH, BATTERY_HEALTH_UNKNOWN);        final int maxChargingMicroAmp = intent.getIntExtra(EXTRA_MAX_CHARGING_CURRENT, -1);        int maxChargingMicroVolt = intent.getIntExtra(EXTRA_MAX_CHARGING_VOLTAGE, -1);        final int maxChargingMicroWatt;        if (maxChargingMicroVolt <= 0) {          maxChargingMicroVolt = DEFAULT_CHARGING_VOLTAGE_MICRO_VOLT;        }        if (maxChargingMicroAmp > 0) {          // Calculating muW = muA * muV / (10^6 mu^2 / mu); splitting up the divisor          // to maintain precision equally on both factors.          maxChargingMicroWatt = (maxChargingMicroAmp / 1000)              * (maxChargingMicroVolt / 1000);        } else {          maxChargingMicroWatt = -1;        }        final Message msg = mHandler.obtainMessage(            MSG_BATTERY_UPDATE, new BatteryStatus(status, level, plugged, health,                maxChargingMicroWatt));        mHandler.sendMessage(msg);

2.4 顯示字符串

frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java

事件接收

protected class BaseKeyguardCallback extends KeyguardUpdateMonitorCallback {    public static final int HIDE_DELAY_MS = 5000;    private int mLastSuccessiveErrorMessage = -1;    @Override    public void onRefreshBatteryInfo(KeyguardUpdateMonitor.BatteryStatus status) {      boolean isChargingOrFull = status.status == BatteryManager.BATTERY_STATUS_CHARGING          || status.status == BatteryManager.BATTERY_STATUS_FULL;      boolean wasPluggedIn = mPowerPluggedIn;      mPowerPluggedIn = status.isPluggedIn() && isChargingOrFull;      mPowerCharged = status.isCharged();      mChargingWattage = status.maxChargingWattage;      mChargingSpeed = status.getChargingSpeed(mSlowThreshold, mFastThreshold);      updateIndication();      if (mDozing) {        if (!wasPluggedIn && mPowerPluggedIn) {          showTransientIndication(computePowerIndication());          hideTransientIndicationDelayed(HIDE_DELAY_MS);        } else if (wasPluggedIn && !mPowerPluggedIn) {          hideTransientIndication();        }      }    }=====================================================================================================  public static class BatteryStatus {    public static final int CHARGING_UNKNOWN = -1;    public static final int CHARGING_SLOWLY = 0;    public static final int CHARGING_REGULAR = 1;    public static final int CHARGING_FAST = 2;    public final int status;    public final int level;    public final int plugged;    public final int health;    public final int maxChargingWattage;    public BatteryStatus(int status, int level, int plugged, int health,        int maxChargingWattage) {      this.status = status;      this.level = level;      this.plugged = plugged;      this.health = health;      this.maxChargingWattage = maxChargingWattage;    }  public final int getChargingSpeed(int slowThreshold, int fastThreshold) {    return maxChargingWattage <= 0 ? CHARGING_UNKNOWN :        maxChargingWattage < slowThreshold ? CHARGING_SLOWLY :        maxChargingWattage > fastThreshold ? CHARGING_FAST :        CHARGING_REGULAR;  }

顯示字符串

frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java    int chargingId;    switch (mChargingSpeed) {      case KeyguardUpdateMonitor.BatteryStatus.CHARGING_FAST:        chargingId = hasChargingTime            ? R.string.keyguard_indication_charging_time_fast            : R.string.keyguard_plugged_in_charging_fast;        break;      case KeyguardUpdateMonitor.BatteryStatus.CHARGING_SLOWLY:        chargingId = hasChargingTime            ? R.string.keyguard_indication_charging_time_slowly            : R.string.keyguard_plugged_in_charging_slowly;        break;      default:        chargingId = hasChargingTime            ? R.string.keyguard_indication_charging_time            : R.string.keyguard_plugged_in;        break;    }

總結

以上所述是小編給大家介紹的Android 8.0 慢充和快充提示語的實現原理,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 渝北区| 长海县| 小金县| 郧西县| 鄄城县| 宣威市| 浙江省| 肃南| 宜阳县| 来宾市| 上杭县| 简阳市| 永胜县| 礼泉县| 东海县| 两当县| 河南省| 南溪县| 巴林右旗| 墨竹工卡县| 夏津县| 江川县| 托克逊县| 龙川县| 商南县| 济源市| 郧西县| 新乡市| 海安县| 新河县| 山西省| 彩票| 莲花县| 武胜县| 大关县| 沙河市| 中西区| 宁海县| 安丘市| 四会市| 陇西县|