`

Android led灯实现大致流程

 
阅读更多
led灯的控制在http://gqdy365.iteye.com/admin/blogs/2208344中写的方法是直接通过操作led设置来控制灯的开关。这样做的问题是未按Android标准结构实现,可能存在潜在的问题,后面分析的一下灯的源码,原来Android系统里面已经提供的相关的实现。

Android系统标准的led可以通过发送通知来控制led灯,做法如下:

	private void notificactionLed() {
		NotificationManager manager = (NotificationManager) this
				.getSystemService(Context.NOTIFICATION_SERVICE);
		Notification notification = new Notification();
		notification.icon = R.drawable.ic_launcher;
		notification.tickerText = "发送灯通知";

		/**
		 * To turn the LED off, pass 0 in the alpha channel for colorARGB or 0 for both ledOnMS and ledOffMS. 
		   To turn the LED on, pass 1 for ledOnMS and 0 for ledOffMS. 
		   To flash the LED, pass the number of milliseconds that it should be on and off to ledOnMS and ledOffMS.
		 */
		notification.defaults = Notification.DEFAULT_LIGHTS;
		notification.ledARGB = 0xffffffff;//控制led灯的颜色
		
		//灯闪烁时需要设置下面两个变量
		notification.ledOnMS = 300;
		notification.ledOffMS = 300;
		
		notification.flags = Notification.FLAG_SHOW_LIGHTS;

		Intent intent = new Intent(this, MainActivity.class);
		PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
				intent, PendingIntent.FLAG_ONE_SHOT);

		notification.setLatestEventInfo(this, "灯测试", "led灯测试", pendingIntent);
		manager.notify(1, notification);
	}


通过查看灯的实现源码,发现如下问题:
在来电或者系统屏幕亮的情况下是没办法控制灯的,具体源码(com.android.server.NotificationManagerService)中是这样的:

private void More ...updateLightsLocked()
2229    {
2230        // handle notification lights
2231        if (mLedNotification == null) {
2232            // get next notification, if any
2233            int n = mLights.size();
2234            if (n > 0) {
2235                mLedNotification = mLights.get(n-1);
2236            }
2237        }
2238
2239        // Don't flash while we are in a call or screen is on
2240        if (mLedNotification == null || mInCall || mScreenOn) {
2241            mNotificationLight.turnOff();
2242        } else {
2243            final Notification ledno = mLedNotification.sbn.getNotification();
2244            int ledARGB = ledno.ledARGB;
2245            int ledOnMS = ledno.ledOnMS;
2246            int ledOffMS = ledno.ledOffMS;
2247            if ((ledno.defaults & Notification.DEFAULT_LIGHTS) != 0) {
2248                ledARGB = mDefaultNotificationColor;
2249                ledOnMS = mDefaultNotificationLedOn;
2250                ledOffMS = mDefaultNotificationLedOff;
2251            }
2252            if (mNotificationPulseEnabled) {
2253                // pulse repeatedly
2254                mNotificationLight.setFlashing(ledARGB, LightsService.LIGHT_FLASH_TIMED,
2255                        ledOnMS, ledOffMS);
2256            }
2257        }
2258    }


在com.android.server.LightsService中对灯的操作做了封装,所有灯的操作调用了:
116        private void More ...setLightLocked(int color, int mode, int onMS, int offMS, int brightnessMode) {
117            if (color != mColor || mode != mMode || onMS != mOnMS || offMS != mOffMS) {
118                if (DEBUG) Slog.v(TAG, "setLight #" + mId + ": color=#"
119                        + Integer.toHexString(color));
120                mColor = color;
121                mMode = mode;
122                mOnMS = onMS;
123                mOffMS = offMS;
124                setLight_native(mNativePointer, mId, color, mode, onMS, offMS, brightnessMode);
125            }
126        }


其中setLight_native方法是一个本地方法,代码在 frameworks/base/services/jni/com_android_server_LightsService.cpp中。
在com_android_server_LightsService中最终还是通过操作设备文件来实现灯的开关,文件位置如下:




参考资料:
http://blog.csdn.net/u011630458/article/details/22280841
http://blog.csdn.net/u011630458/article/details/22312901
  • 大小: 53.5 KB
0
0
分享到:
评论

相关推荐

    户外全彩LED显示屏生产安装流程

    "户外全彩LED显示屏生产安装流程" 一、户外全彩LED显示屏生产安装流程概述 户外全彩LED显示屏是一种大型显示设备,主要应用于户外广告、公共信息发布、娱乐等领域。其生产安装流程是一个复杂的过程,涉及到多个...

    LED显示屏的检验流程

    一、查看LED显示屏显示的颜色是否与播映源的颜色保持高度一致,及相邻模组之间是否存在较明显的色块色差。以此保证所装置的LED显示屏图画的真实感,控制系统、灰度等级、扫描频率的优良性。 二、查看显示屏上是否有...

    Android内核led灯驱动程序

    在Android系统中,LED灯驱动程序是内核层面的一个重要组成部分,它负责与硬件交互,控制设备上的LED灯的亮灭状态。LED灯驱动通常基于Linux内核的设备驱动模型来编写,允许操作系统通过特定的接口与硬件进行通信。在...

    LED灯珠对LED显示屏的影响

    LED灯珠作为LED显示屏中最核心的组成部分,其质量直接影响了整个显示屏的显示效果和使用寿命。了解LED灯珠对LED显示屏的影响以及如何鉴别其优劣,是保证LED显示屏高质量显示效果的重要前提。 首先,LED灯珠在显示屏...

    LED显示屏知识完整教程_led显示屏_

    LED显示屏是一种广泛应用于商业、广告、舞台、交通、体育赛事等各种场合的信息显示设备。它以其高亮度、色彩鲜艳、视角宽广、寿命长等特点,深受用户喜爱。本教程将全面介绍LED显示屏的基础知识,帮助读者从零开始...

    LED显示屏培训教程

    典型的LED显示屏控制系统图展示了数据传输路径、控制节点布局等关键信息,有助于理解显示屏的整体架构和技术实现方式。通过对这些拓扑图的研究,可以深入了解显示屏的工作原理,并为实际安装和维护提供指导。 综上...

    Android驱动例子(LED灯控制).pdf

    完成驱动编写后,我们需要一个Android应用程序来调用驱动,实现LED灯的控制。应用程序会通过Android的Binder机制与驱动交互,通过`ioctl`或`open`、`write`、`read`等系统调用来控制LED的亮灭。应用程序可能会定义...

    LED显示屏开发包,使用C#开发,在LED显示屏滚动显示文字的源代码

    在LED显示屏上实现文字滚动,需要编写算法来处理文字的移动和显示。开发人员可能创建了一个自定义的类,用于存储文字信息,并设计了方法来处理滚动逻辑。这可能包括设置滚动速度、方向(左右、上下)、暂停和恢复...

    单片机 LED显示屏动态显示和远程监控的实现

    单片机 LED显示屏动态显示和远程监控的实现单片机 LED显示屏动态显示和远程监控的实现单片机 LED显示屏动态显示和远程监控的实现单片机 LED显示屏动态显示和远程监控的实现单片机 LED显示屏动态显示和远程监控的实现...

    android led 测试例子

    在Android系统中,LED(Light Emitting Diode)驱动是一个重要的组成部分,它允许设备上的LED灯进行各种功能,如通知灯、电量指示灯等。这篇文档是台湾一家公司提供的开放培训资料,专注于讲解如何在Android平台上...

    Android蓝牙控制arduino实现LED灯亮度连续可调

    资源包中包含了源代码和指令格式说明,包括安卓端和arduino端代码,且有详细注释;...Android端程序功能和界面都很简单,提供界面连接蓝牙模块以及实现arduino端的LED灯亮度连续可调。方便初学者使用。

    LED显示屏动态显示和远程监控的实现

    通过单片机控制,LED显示屏能够实时、灵活地展示各种数据和信息,并且可以通过网络实现远程监控,极大地提升了信息传播的效率和便利性。以下将详细阐述这一技术的实现原理及关键点。 首先,LED显示屏动态显示的核心...

    LedDemo,Android LED HVL Stub实现

    在Android平台上,LED控制是通过特定的硬件接口或者系统服务来实现的,这些接口或服务允许应用程序对设备上的LED灯进行编程,以显示各种状态或通知。`LedDemo`项目是一个示例应用,展示了如何在Android中实现一个LED...

    户外LED显示屏立柱结构施工流程.docx编程资料

    ### 户外LED显示屏立柱结构施工流程 #### 一、引言 随着LED显示屏技术的不断进步,其在户外广告领域的应用日益广泛。LED显示屏以其高亮度、色彩鲜艳、视角宽广等优点,成为现代都市一道亮丽的风景线。在实际应用中...

    安卓智能家居,android app源码,初步是实现开关、led灯亮度,电机pwm等,定时

    本项目提供的【android app源码】是一个基础实现,涵盖了对开关、LED灯亮度调整、电机PWM控制以及定时功能的编程。 首先,让我们深入理解一下这些功能的实现原理: 1. **开关控制**:在智能家居系统中,开关通常指...

    室外LED显示屏制造流程

    ### 室外LED显示屏制造流程详解 #### 一、引言 随着科技的进步,LED显示屏在广告、体育赛事、商业展示等领域得到了广泛应用。其中,室外LED显示屏因其具有高亮度、防水、耐用等特点,在户外环境中展现出独特的优势...

    球形LED显示屏的制作方法解析

    本文将详细介绍球形LED显示屏的制作方法和工艺流程。 首先,球形LED显示屏的设计和制造涉及到了对LED技术的创新应用。LED显示屏技术的提升使得显示屏不仅在性能上更加稳定、亮度更高,而且在外观设计上也更加多样化...

    Android Studio设计APP实现与51单片机通过WIFI模块(ESP8266-01S)通讯控制LED灯亮灭的设计APP

    Github已开源:...详细内容也可看我的文章:https://mp.csdn.net/mp_blog/creation/editor/124478948《Android Studio设计APP实现与51单片机通过WIFI模块(ESP8266-01S)通讯控制LED灯亮灭的设计源码【详解】》

    Android通过jni控制LED灯

    本文将深入探讨如何利用JNI技术在Android平台上实现对LED灯的直接控制。 首先,我们要理解JNI的基本概念。JNI是Java平台提供的一种接口,允许Java代码和其他语言写的代码进行交互。它使得开发者可以编写部分C/C++...

    海康LED显示屏协议对接

    总结来说,“海康LED显示屏协议对接”是通过TCP/IP协议在Windows环境中实现对LED显示屏的控制。这涉及到socket编程,包括连接、发送、接收和关闭等步骤,同时需要深入理解海康提供的协议规范,以确保数据的有效传输...

Global site tag (gtag.js) - Google Analytics