Android灯光系统--通知灯深入分析

通知的类别

  • 声音

  • 振动

  • 闪灯

APP如何发出通知灯请求

  1. getSystemService(获得通知服务)

  2. 构造notification

    • 类别

    • 其他参数(颜色,onMS,offMS)

  3. 发出通知

系统如何处理

  1. 启动通知Service

  2. 收到通知之后

    • 分辨通知类型

    • 执行响应操作

  3. 对于通知灯

    • 获得LightService

    • 执行灯光相关操作

APP如何获得通知服务

  1. ContextImp:resigsterService

  2. 返回一个NotificationManager对象

  3. 构造Notification

  4. NotificationManager.notify()将通知发送出去

发送通知之后如何调用通知灯

  1. Service=getService() //获得某个服务

    • 注册有Notification服务

    • 根据名字Notification获得Service服务

  2. Service.enqueueNotificationwithTag //放入通知队列

  3. 通过enqueueNotificationwithTag中的buzzBeepBlinkLocked判断是否是属于哪种通知类别

  4. 获得通知属于闪灯,调用updateLightsLocked()

  5. 取出notification当中的参数,调用mNotificationLights类当中的setFlashing

    • 注册LightManager服务

    • 根据ID从LightManager中返回获取mNotificationLights类

编写模拟通知灯安卓程序

  1. 定义按钮,控制20S之后熄屏亮灯

    • 定义Flashing boolean型变量,用于控制按钮操作

    • 设置按钮响应函数--判断按钮操作,改变按钮text值,并且发出通知

  2. 构造通知执行方法 - 实现Runnable接口方法

    • 获得按钮状态

      • 调用开通知灯函数

      • 获得通知服务

      • 构造通知,设置参数

      • 发送通知

    • 关闭通知灯函数

      • 获得通知服务

      • 取消通知灯服务

  3. 通知

    • 延迟20S通知调用postDelayed函数

附上详细代码:


package com.example.alienware.app_0002_lightdemo; import android.app.Notification; import android.app.NotificationManager; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.Button; import android.view.View; /* * 模拟熄屏时候,短信等通知发生时候,通知灯亮起 * 设置屏幕背光亮时间为15s,才可以进行下列实验 * Date:2017.2.16 Author:LKQ * 代码原创者:韦东山老师 */ public class MainActivity extends AppCompatActivity { private Button mLightButton = null; boolean Flashing = false; final private int LED_NOTIFICATION_ID = 109; private Handler mLightHandler = new Handler(); private LightRunnable mLightRunnable = new LightRunnable(); //实现消息通知后的执行方法 class LightRunnable implements Runnable{ @Override public void run() { if(Flashing){ BlueFlashLight(); //蓝灯闪亮 } else{ ClearLED(); //关闭通知灯 } } } private void BlueFlashLight() { NotificationManager nm = (NotificationManager)getSystemService( NOTIFICATION_SERVICE ); //获取通知服务 Notification notif = new Notification(); //构造通知类型 notif.flags = Notification.FLAG_SHOW_LIGHTS; //设置通知类型为通知灯 notif.ledARGB = 0xFF0000ff; //颜色 notif.ledOnMS = 1000; notif.ledOffMS = 1000; //闪烁时间为1S nm.notify(LED_NOTIFICATION_ID, notif); //发送通知 } private void ClearLED() { NotificationManager nm = ( NotificationManager ) getSystemService( NOTIFICATION_SERVICE ); nm.cancel( LED_NOTIFICATION_ID ); //关闭通知灯 } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mLightButton = (Button)findViewById(R.id.button); mLightButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // Perform action on click Flashing = !Flashing; if (Flashing) { mLightButton.setText("Stop Flashing the Light !"); } else { mLightButton.setText("Flashing Light at 20S"); } mLightHandler.postDelayed(mLightRunnable, 20000); //20S之后,即是熄屏时候,通知灯闪烁 } }); } }

Android灯光系统--通知灯深入分析的更多相关文章

  1. Android灯光系统--通知灯深入分析【转】

    本文转自:https://www.cnblogs.com/lkq1220/p/6406261.html Android灯光系统--通知灯深入分析 通知的类别 声音 振动 闪灯 APP如何发出通知灯请求 ...

  2. Android系统之灯光系统--通知灯深入分析

    Android通知灯的深入分析 通知的类别 声音 振动 闪灯 APP如何发出通知灯请求 getSystemService(通知服务) 构造notification 类别 其他参数(颜色,onMS,of ...

  3. 8.5 Android灯光系统_源码分析_通知灯

    参考文章(应用程序举例)how to use the LED with Android phonehttp://androidblogger.blogspot.jp/2009/09/tutorial- ...

  4. 【转】Android中通知的提示音、震动和LED灯效果小例子

    通知(Notification)是 Android 系统中比较有特色的一个功能,当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现.发出一条通知后,手机最上方 ...

  5. Android灯光系统--深入理解背光灯

    Android灯光系统--深入理解背光灯 一.怎么控制背光灯(简述) APP将亮度值写入数据库 线程检测数据库的值是否发生变化 这种机制成为"内容观察者"--contentObse ...

  6. Android灯光系统_编写HAL_lights.c【转】

    本文转载自:https://blog.csdn.net/qq_33443989/article/details/77074411 1>. 编写灯光系统的HAL层 之 HAL_light.c1&l ...

  7. 8.1 Android灯光系统_总体框架

    1.框架 APP(java语言实现) ------------------------------- JNI(c++语言实现)     向上提供Java执行c函数的接口  向下访问HAL ------ ...

  8. android: 使用通知

    8.1   使用通知 通知(Notification)是 Android 系统中比较有特色的一个功能,当某个应用程序希望向 用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现.发 ...

  9. Android消息通知(notification)和PendingIntent传值

    通知栏的自定义布局:转:http://blog.csdn.net/vipzjyno1/article/details/25248021 拓展 实现自定义的通知栏效果: 这里要用到RemoteViews ...

随机推荐

  1. JIRA licence and vulnarability,jenkins,devops

    http://blog.itpub.net/13651903/viewspace-1079918/ http://www.freebuf.com/articles/web/34051.html JIR ...

  2. ssh各种姿势---ssh-keygen 生成ssh公钥和私钥

    利用ssh-keygen -t rsa可以生成ssh公钥和私钥,实现免输密码的ssh登陆     ssh-keygen -l -f /etc/ssh_host_rsa_key   ssh-keygen ...

  3. Django - 学习目录

    Django 基础 web应用/http协议/web框架 Django简介 Django - 路由层(URLconf) Django - 视图层 Django - 模板层 Django - 模型层 - ...

  4. 洛谷P1083 借教室 NOIP2012D2T2 线段树

    正解:线段树 解题报告: ...真的不难啊只是开了这个坑就填下? 就是先读入每天的教室数建个线段树然后每次读入就update一下,线段树存的就这一段的最小值啊,然后如果有次更新完之后tr[1]小于0了 ...

  5. 牛客练习赛18E pocky游戏 状压dp

    正解:状压dp+辅助dp 解题报告: 来还债辣!NOIp之后还是轻松很多了呢,可以一点点儿落实之前欠下的各种东西一点点提升自己!加油鸭! 是个好题,可以积累套路,启发性强,而且很难 哦而且状压它也是个 ...

  6. Why String is Immutable or Final in Java

    The string is Immutable in Java because String objects are cached in String pool. Since cached Strin ...

  7. Shell初学(二)变量及数组

    精简版: 定义:your_name=123      PS:=符号左右不能有空格! 使用:${your_name},单独使用变量时可以不加{} 只读:readonly your_name  PS:设置 ...

  8. mysql python pymysql模块 基本使用

    我们都是通过MySQL自带的命令行客户端工具mysql来操作数据库,那如何在python程序中操作数据库呢? 这就用到了pymysql模块,该模块本质就是一个套接字客户端软件,使用前需要事先安装 pi ...

  9. linux平台mysql密码设置

    登录mysql默认没有指定账号 查看默认账号是谁 select user(); mysql> select user();+----------------+| user() |+------- ...

  10. 前端 html input标签 disable 属性

    该属性只要出现在标签中,表示禁用该控件 <!DOCTYPE html> <html lang="en"> <head> <meta cha ...