下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
【移動應用開發(fā)技術(shù)】怎么在Android8.0中實現(xiàn)慢充和快充提示語
今天就跟大家聊聊有關(guān)怎么在Android8.0中實現(xiàn)慢充和快充提示語,可能很多人都不太了解,為了讓大家更加了解,在下給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。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\values1.快充充電器充電-顯示快速充電字符串<!--
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.原理根據(jù)當前的最大電壓和電流計算出電流速度,并進行分類為慢速充電,充電,快速充電2.1源代碼中的原始數(shù)據(jù)?public
static
final
String
EXTRA_MAX_CHARGING_CURRENT
=
“max_charging_current”;
?public
static
final
String
EXTRA_MAX_CHARGING_VOLTAGE
=
“max_charging_voltage”;發(fā)送“電池廣播”位置將最大電流和電壓上發(fā)應用層,這里主要一些8.1以上新增的數(shù)據(jù),7.0以前有這個數(shù)據(jù)但是framework層沒有使用frameworks/base/services/core/java/com/android/server/BatteryService.java
//
發(fā)送電池廣播事件
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.2adbshell查看linux的文件節(jié)點?獲取當前的電流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的算法規(guī)則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/KeyguardIndicationCon
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度住宅小區(qū)雨水排放與中水回用施工合同4篇
- 二零二五年度互聯(lián)網(wǎng)金融平臺風險預警合同4篇
- 2025年度智能家居服務內(nèi)部銷售承包合同4篇
- 二零二五年度健康醫(yī)療名義合伙人合同3篇
- 2025年度出國留學學術(shù)成果轉(zhuǎn)化服務合同3篇
- 二零二五年度企業(yè)展示觸摸一體機定制采購合同3篇
- 二零二五年度出租車租賃合同范本及車輛維修保養(yǎng)協(xié)議4篇
- 2025年度頁巖磚綠色生產(chǎn)認證體系建立合同3篇
- 二零二五年度工業(yè)用地承租合同(含設(shè)備安裝服務)4篇
- 2025年度廚師臨時用工合同范本(食品安全專項)3篇
- 茉莉花-附指法鋼琴譜五線譜
- 結(jié)婚函調(diào)報告表
- SYT 6968-2021 油氣輸送管道工程水平定向鉆穿越設(shè)計規(guī)范-PDF解密
- 冷庫制冷負荷計算表
- 肩袖損傷護理查房
- 設(shè)備運維管理安全規(guī)范標準
- 辦文辦會辦事實務課件
- 大學宿舍人際關(guān)系
- 2023光明小升初(語文)試卷
- GB/T 14600-2009電子工業(yè)用氣體氧化亞氮
- 申請使用物業(yè)專項維修資金征求業(yè)主意見表
評論
0/150
提交評論