Android灯光系统--通知灯深入分析【转】
本文转自:https://www.cnblogs.com/lkq1220/p/6406261.html
Android灯光系统--通知灯深入分析
通知的类别
- 
声音 
- 
振动 
- 
闪灯 
APP如何发出通知灯请求
- 
getSystemService(获得通知服务) 
- 
构造notification - 
类别 
- 
其他参数(颜色,onMS,offMS) 
 
- 
- 
发出通知 
系统如何处理
- 
启动通知Service 
- 
收到通知之后 - 
分辨通知类型 
- 
执行响应操作 
 
- 
- 
对于通知灯 - 
获得LightService 
- 
执行灯光相关操作 
 
- 
APP如何获得通知服务
- 
ContextImp:resigsterService 
- 
返回一个NotificationManager对象 
- 
构造Notification 
- 
NotificationManager.notify()将通知发送出去 
发送通知之后如何调用通知灯
- 
Service=getService() //获得某个服务 - 
注册有Notification服务 
- 
根据名字Notification获得Service服务 
 
- 
- 
Service.enqueueNotificationwithTag //放入通知队列 
- 
通过enqueueNotificationwithTag中的buzzBeepBlinkLocked判断是否是属于哪种通知类别 
- 
获得通知属于闪灯,调用updateLightsLocked() 
- 
取出notification当中的参数,调用mNotificationLights类当中的setFlashing - 
注册LightManager服务 
- 
根据ID从LightManager中返回获取mNotificationLights类 
 
- 
编写模拟通知灯安卓程序
- 
定义按钮,控制20S之后熄屏亮灯 - 
定义Flashing boolean型变量,用于控制按钮操作 
- 
设置按钮响应函数--判断按钮操作,改变按钮text值,并且发出通知 
 
- 
- 
构造通知执行方法 - 实现Runnable接口方法 - 
获得按钮状态 - 
调用开通知灯函数 
- 
获得通知服务 
- 
构造通知,设置参数 
- 
发送通知 
 
- 
- 
关闭通知灯函数 - 
获得通知服务 
- 
取消通知灯服务 
 
- 
 
- 
- 
通知 - 延迟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之后,即是熄屏时候,通知灯闪烁
            }
        });
    }
} 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号