Android指示灯控制
电池指示灯
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指示灯控制相关推荐
- android保存播放进度,Android MediaPlayer控制进度播放音频
Android MediaPlayer控制进度播放音频 本文简单介绍MediaPlayer获取播放进度和设置进度播放. 1.获取音频文件的播放时间总长度 //返回的是int的毫秒级数据 /** * G ...
- Android MediaPlayer控制进度播放音频
Android MediaPlayer控制进度播放音频 本文简单介绍MediaPlayer获取播放进度和设置进度播放. 1.获取音频文件的播放时间总长度 //返回的是int的毫秒级数据/*** Get ...
- android中如何打开指定卡上的数据连接开关,Android 代码控制手机数据网络的开关(5.0以上)...
Android 代码控制手机数据网络的开关 文章目录 android 5.0以前 5.0以后 Code android 5.0以前 Android 5.0以前使用ConnectivityManager ...
- Android硬件控制之USB连接
简介 在Android实现USB连接有什么作用?USB连接有什么限制?USB连接实现的难度? 1.Android实现USB连接有什么作用? 在Android上实现USB连接的用处在于可以在搭载Andr ...
- Android应用控制LED(静态编译LED驱动)
此文章是Android应用控制底层硬件的小实验,记录下来,以防后面忘记如何操作.后面也可以按照此流程进行其他开发 开发平台:DMATEK PAD-4412 内核:Linux3.2.0 系统:An ...
- Android音量控制
0. Thanks To Android音量控制调节 android 音量控制setVolumeControlStream android 音量调节以及媒体音量界面 1. 音量调节 我们知道,在平常调 ...
- 使用Android手机控制树莓派操作流程
使用Android手机控制树莓派操作流程 二次排版请看此连接:详细请看二次排版,有图有真相直达: 如果你觉得用计算机来控制树莓派不太方便,要求路由器网线等比较多,那么今天我就简单的说说如何用安卓手机来 ...
- android studio 课程表,基于课程表的安卓Android手机控制APP设计(AndroidStudio,SQLite)(含录像)...
基于课程表的安卓Android手机控制APP设计(AndroidStudio,SQLite)(含录像)(毕业论文12000字,程序代码) 摘 要 随着IT技术的发展,以前老套的课程表内容查询管理方式已 ...
- Android硬件控制之POS热敏打印(支持任意图表)
简介 在Android实现Pos打印的应用场景?实现pos打印的难度?如何用只支持黑白的热敏打印机打印出灰阶效果? 在Android实现Pos打印的应用场景? pos热敏打印机在平时生活中还是挺常见的 ...
最新文章
- 宏基因组报名倒计时!报名线上课还可免费参加线下课
- Iterative error correction of long sequencing reads maximizes accuracy and improves contig assembly
- vla点转为lisp点_专家们说,中国股市将进入牛市,大盘可能超12000点是真吗?
- 再论SAP云平台上CloudFoundry编程环境的connectivity
- 5940. 从数组中移除最大值和最小值
- ABAQUS常用量纲
- 推荐10款最佳的App安全测试工具
- 集成运算放大器之微分电路搭建
- 读《史蒂夫•乔布斯传》(七)
- php revel,golang,revel_Revel 的路由问题,golang,revel - phpStudy
- Codeforces Round #583 E	 Petya and Construction (构造)
- 畅购商城-添加订单实现(一)
- Java数据类型和变量
- C/C++版本更迭历程
- 基于飞凌RK3588核心板的无人机主控方案
- php 编辑器 插入视频,织梦dedecms默认编辑器实现上传视频功能
- docker中sentinel无法监控
- h5自动弹窗html模板,html5手机弹出对话框动画特效
- 微型计算机控制技术中南大学,中南大学2013微型计算机控制技术试题及答案.doc...
- 2021年中国大豆行业发展现状分析,行业仍需大量进口「图」