电池指示灯

frameworks/base/core/res/res/values/config.xml

 <!-- Default value for led color when battery is low on charge -->
<integer name="config_notificationsBatteryLowARGB">0xFFFF0000</integer><!-- Default value for led color when battery is medium charged -->
<integer name="config_notificationsBatteryMediumARGB">0xFFFFFF00</integer><!-- Default value for led color when battery is fully charged -->
<integer name="config_notificationsBatteryFullARGB">0xFF00FF00</integer>

0xAABBCCDD

AA(透明度)

BB(红色)

CC(绿色)

DD(蓝色)

frameworks/base/services/core/java/com/android/server/BatteryService.java

private final class Led {private final Light mBatteryLight;private final int mBatteryLowARGB;private final int mBatteryMediumARGB;private final int mBatteryFullARGB;private final int mBatteryLedOn;private final int mBatteryLedOff;public Led(Context context, LightsManager lights) {mBatteryLight = lights.getLight(LightsManager.LIGHT_ID_BATTERY);mBatteryLowARGB = context.getResources().getInteger(com.android.internal.R.integer.config_notificationsBatteryLowARGB);mBatteryMediumARGB = context.getResources().getInteger(com.android.internal.R.integer.config_notificationsBatteryMediumARGB);mBatteryFullARGB = context.getResources().getInteger(com.android.internal.R.integer.config_notificationsBatteryFullARGB);mBatteryLedOn = context.getResources().getInteger(com.android.internal.R.integer.config_notificationsBatteryLedOn);mBatteryLedOff = context.getResources().getInteger(com.android.internal.R.integer.config_notificationsBatteryLedOff);}/*** Synchronize on BatteryService.*/public void updateLightsLocked() {final int level = mHealthInfo.batteryLevel;final int status = mHealthInfo.batteryStatus;if (level < mLowBatteryWarningLevel) {if (status == BatteryManager.BATTERY_STATUS_CHARGING) {// Solid red when battery is chargingmBatteryLight.setColor(mBatteryLowARGB);} else {// Flash red when battery is low and not chargingmBatteryLight.setFlashing(mBatteryLowARGB, Light.LIGHT_FLASH_TIMED,mBatteryLedOn, mBatteryLedOff);}} else if (status == BatteryManager.BATTERY_STATUS_CHARGING|| status == BatteryManager.BATTERY_STATUS_FULL) {if (status == BatteryManager.BATTERY_STATUS_FULL || level >= 90) {// Solid green when full or charging and nearly fullmBatteryLight.setColor(mBatteryFullARGB);} else {// Solid orange when charging and halfway fullmBatteryLight.setColor(mBatteryMediumARGB);}} else {// No lights if not charging and not lowmBatteryLight.turnOff();}}}

//充电,没充满 红灯

//充电,达到90%的电量  绿灯

//低电量,没充电  闪红灯

呼吸灯

应用可以设置呼吸灯的颜色,比如在熄屏状态下,qq收到消息后,手机的绿灯会闪。

frameworks/base/services/core/java/com/android/server/notification/NotificationManagerService.java

 @GuardedBy("mNotificationLock")void updateLightsLocked(){// handle notification lightsNotificationRecord ledNotification = null;while (ledNotification == null && !mLights.isEmpty()) {final String owner = mLights.get(mLights.size() - 1);ledNotification = mNotificationsByKey.get(owner);if (ledNotification == null) {Slog.wtfStack(TAG, "LED Notification does not exist: " + owner);mLights.remove(owner);}}// Don't flash while we are in a call or screen is onif (ledNotification == null || mInCall || mScreenOn) {mNotificationLight.turnOff();} else {NotificationRecord.Light light = ledNotification.getLight();if (light != null && mNotificationPulseEnabled) {// pulse repeatedlymNotificationLight.setFlashing(light.color, Light.LIGHT_FLASH_TIMED,light.onMs, light.offMs);}}}

有时需要固定呼吸灯的颜色,这样所有的呼吸灯颜色都是绿色了。

mNotificationLight.setFlashing(0xff00ff00, Light.LIGHT_FLASH_TIMED,light.onMs, light.offMs);

最终调到这里

frameworks/base/services/core/java/com/android/server/BatteryService.java

        private void setLightLocked(int color, int mode, int onMS, int offMS, int brightnessMode) {if (shouldBeInLowPersistenceMode()) {brightnessMode = BRIGHTNESS_MODE_LOW_PERSISTENCE;} else if (brightnessMode == BRIGHTNESS_MODE_LOW_PERSISTENCE) {brightnessMode = mLastBrightnessMode;}if (!mInitialized || color != mColor || mode != mMode || onMS != mOnMS ||offMS != mOffMS || mBrightnessMode != brightnessMode) {if (DEBUG) Slog.v(TAG, "setLight #" + mId + ": color=#"+ Integer.toHexString(color) + ": brightnessMode=" + brightnessMode);mInitialized = true;mLastColor = mColor;mColor = color;mMode = mode;mOnMS = onMS;mOffMS = offMS;mBrightnessMode = brightnessMode;Trace.traceBegin(Trace.TRACE_TAG_POWER, "setLight(" + mId + ", 0x"+ Integer.toHexString(color) + ")");try {setLight_native(mId, color, mode, onMS, offMS, brightnessMode);} finally {Trace.traceEnd(Trace.TRACE_TAG_POWER);}}}

再往下就是灯的hal层和三色灯(多数pmic有集成)驱动了。

还有一个就是关机充电的指示灯,充电红灯,充满点绿灯,该部分代码在一个可执行程序中。

Android指示灯控制相关推荐

  1. android保存播放进度,Android MediaPlayer控制进度播放音频

    Android MediaPlayer控制进度播放音频 本文简单介绍MediaPlayer获取播放进度和设置进度播放. 1.获取音频文件的播放时间总长度 //返回的是int的毫秒级数据 /** * G ...

  2. Android MediaPlayer控制进度播放音频

    Android MediaPlayer控制进度播放音频 本文简单介绍MediaPlayer获取播放进度和设置进度播放. 1.获取音频文件的播放时间总长度 //返回的是int的毫秒级数据/*** Get ...

  3. android中如何打开指定卡上的数据连接开关,Android 代码控制手机数据网络的开关(5.0以上)...

    Android 代码控制手机数据网络的开关 文章目录 android 5.0以前 5.0以后 Code android 5.0以前 Android 5.0以前使用ConnectivityManager ...

  4. Android硬件控制之USB连接

    简介 在Android实现USB连接有什么作用?USB连接有什么限制?USB连接实现的难度? 1.Android实现USB连接有什么作用? 在Android上实现USB连接的用处在于可以在搭载Andr ...

  5. Android应用控制LED(静态编译LED驱动)

     此文章是Android应用控制底层硬件的小实验,记录下来,以防后面忘记如何操作.后面也可以按照此流程进行其他开发 开发平台:DMATEK PAD-4412 内核:Linux3.2.0 系统:An ...

  6. Android音量控制

    0. Thanks To Android音量控制调节 android 音量控制setVolumeControlStream android 音量调节以及媒体音量界面 1. 音量调节 我们知道,在平常调 ...

  7. 使用Android手机控制树莓派操作流程

    使用Android手机控制树莓派操作流程 二次排版请看此连接:详细请看二次排版,有图有真相直达: 如果你觉得用计算机来控制树莓派不太方便,要求路由器网线等比较多,那么今天我就简单的说说如何用安卓手机来 ...

  8. android studio 课程表,基于课程表的安卓Android手机控制APP设计(AndroidStudio,SQLite)(含录像)...

    基于课程表的安卓Android手机控制APP设计(AndroidStudio,SQLite)(含录像)(毕业论文12000字,程序代码) 摘 要 随着IT技术的发展,以前老套的课程表内容查询管理方式已 ...

  9. Android硬件控制之POS热敏打印(支持任意图表)

    简介 在Android实现Pos打印的应用场景?实现pos打印的难度?如何用只支持黑白的热敏打印机打印出灰阶效果? 在Android实现Pos打印的应用场景? pos热敏打印机在平时生活中还是挺常见的 ...

最新文章

  1. 宏基因组报名倒计时!报名线上课还可免费参加线下课
  2. Iterative error correction of long sequencing reads maximizes accuracy and improves contig assembly
  3. vla点转为lisp点_专家们说,中国股市将进入牛市,大盘可能超12000点是真吗?
  4. 再论SAP云平台上CloudFoundry编程环境的connectivity
  5. 5940. 从数组中移除最大值和最小值
  6. ABAQUS常用量纲
  7. 推荐10款最佳的App安全测试工具
  8. 集成运算放大器之微分电路搭建
  9. 读《史蒂夫•乔布斯传》(七)
  10. php revel,golang,revel_Revel 的路由问题,golang,revel - phpStudy
  11. Codeforces Round #583 E Petya and Construction (构造)
  12. 畅购商城-添加订单实现(一)
  13. Java数据类型和变量
  14. C/C++版本更迭历程
  15. 基于飞凌RK3588核心板的无人机主控方案
  16. php 编辑器 插入视频,织梦dedecms默认编辑器实现上传视频功能
  17. docker中sentinel无法监控
  18. h5自动弹窗html模板,html5手机弹出对话框动画特效
  19. 微型计算机控制技术中南大学,中南大学2013微型计算机控制技术试题及答案.doc...
  20. 2021年中国大豆行业发展现状分析,行业仍需大量进口「图」

热门文章

  1. 以我所能,为你而+,新一代音视频融合通信平台全接触
  2. 使用 xlsx 下载 xlsx 文件
  3. 分享五个好用的自定义域名链接缩短平台,2023年测试可用
  4. MCGS---用户自定义设备驱动
  5. 求矩阵行列式的值(方阵)——C
  6. 2020-09-24: 什么是应用解耦?
  7. 【网络技术】VRRP报文交互
  8. springboot毕设项目基于的大学生创新创业项目的管理系统kri27(java+VUE+Mybatis+Maven+Mysql)
  9. 使用Google帐号登录Android应用
  10. vscode 主题