标签:指示灯 brightness color 呼吸 int state 亮度 mNM
工作需要,要求改动指示灯的亮度,翻遍了百度,改变指示灯亮度都是直接修改文件/sys/class/leds/green/brightness。
后来自己查看底层代码,其实应该是上层修改的,没必要直接修改底层文件,可以直接复制下面方法使用,如有错误,请不吝指点:
/*计算指示灯颜色和亮度
* setColor:灯的颜色,可以设置为:red:0xffff0000 blue:0xff0000ff green:0xff00ff00
* brightness:灯的亮度,可设置范围0~255
* */
private int setSignalLightBrightness(int setColor, int brightness) {
int color = brightness & 0x000000ff;//假设亮度设为20,20的16进制为14,得0x00000014
color = 0xff000000 | (color << 16) | (color << 8) | color; //移位和异运算后得0xff141414
color = color & setColor; //(假设为绿色)0xff00ff00 & 0xff141414 得0xff001400
return color;//最终得0xff001400,后面传入底层进一步计算得各颜色亮度值(如下):
/*上面的值后面传到底层时经过移位运算符计算,得到各颜色的亮度值:
red = (state->color >> 16) & 0xFF; //亮度为0
green = (state->color >> 8) & 0xFF; //亮度为20
blue = state->color & 0xFF; //亮度为0
底层文件参考:hardware/light/lights.c
*/
}
private void showRGBLight(boolean state) {
try {
mNM = (NotificationManager) mContext
.getSystemService(Context.NOTIFICATION_SERVICE);
Log.d(TAG, "showRGBLight mNM is111 " + mNM);
} catch (Exception e) {
e.printStackTrace();
return;
}
if (state) {
n = new Notification();
n.flags |= Notification.FLAG_SHOW_LIGHTS;
int color = setSignalLightBrightness(0xff00ff00, 40);//颜色:green,亮度:40
n.ledARGB = color;//颜色和亮度
n.ledOnMS = 500;//亮灯时间
n.ledOffMS = 4000;//灭灯时间
mNM.notify(309, n); //309:normal light(origin mean charge_ok), 303: missed call, 300: no service
} else {
mNM.cancel(309);
}
}
标签:指示灯,brightness,color,呼吸,int,state,亮度,mNM 来源: https://blog.csdn.net/qq_36749859/article/details/101053432
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。