91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Android 8.0中實現慢充和快充提示語

發布時間:2021-05-27 17:05:56 來源:億速云 閱讀:299 作者:Leah 欄目:移動開發

今天就跟大家聊聊有關怎么在Android 8.0中實現慢充和快充提示語,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

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_max
adb shell cat /sys/class/power_supply/battery/current_max
30000001

?獲取當前的電壓

adb shell cat /sys/class/power_supply/battery/voltage_max
adb shell cat /sys/class/power_supply/battery/voltage_max
50000001

?具體源碼

system/core/healthd/BatteryMonitor.cpp
#define POWER_SUPPLY_SYSFS_PATH "/sys/class/" POWER_SUPPLY_SUBSYSTEM
path.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中實現慢充和快充提示語有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

买车| 溧阳市| 郴州市| 和田市| 阿克苏市| 万年县| 武城县| 凉城县| 金湖县| 巩留县| 合水县| 德化县| 敦煌市| 东平县| 定结县| 旌德县| 堆龙德庆县| 东安县| 和政县| 伊金霍洛旗| 隆德县| 白城市| 西乌珠穆沁旗| 南靖县| 锦屏县| 海兴县| 讷河市| 辽宁省| 阿坝| 乌恰县| 玉溪市| 弥勒县| 光泽县| 玉环县| 临西县| 临洮县| 巩留县| 武冈市| 正镶白旗| 博乐市| 黑河市|