- 博客(25)
- 资源 (12)
- 收藏
- 关注
原创 Android开发:实现CEC设备联动关机流程详解
参数验证:检查消息体长度是否超限。结构体转换:将 AIDL/HIDL 的CecMessage转换为厂商驱动的。硬件调用:通过厂商提供的函数指针实际发送消息。结果返回:将驱动返回的整数结果转换为枚举并向上传递。该函数是连接 Android CEC 框架与硬件驱动的桥梁,其实现简洁高效,体现了 HAL 层“薄封装”的设计原则。理解这段代码有助于定位 CEC 发送失败时是上层参数问题还是底层驱动问题。是一个厂商深度定制的 CEC 发送函数,它:封装了对 Linux 内核 CEC 驱动(/dev/cecX。
2026-04-15 19:26:56
563
原创 【Android系统开发】CEC功能详解
层次核心组件开发者职责应用层调用系统 API 获取 CEC 状态和控制设备FrameworkGoogle 已实现,通常无需修改HALAIDL/HIDL 接口实现 SoC 厂商提供的 CEC HAL 库Kernel实现回调,处理硬件寄存器对于嵌入式 Android 系统开发者来说,适配 CEC 功能的主要工作集中在HAL 层和内核驱动的实现,而 Framework 层的已经提供了完整的协议处理和策略管理。理解逻辑地址分配、按键映射规则和调试工具,是快速定位问题、完成功能适配的关键。
2026-03-25 18:04:06
903
原创 【嵌入式开发】新遥控器适配流程简介
Android系统中遥控器适配涉及应用层、框架层、HAL层和内核层的协作。核心流程包括事件传递、键值映射和驱动支持。Linux内核需正确识别遥控器硬件。遥控器扫描码到Android键码的映射通过。接收遥控器输入事件。工具获取原始扫描码,使用。输入设备在HAL层通过。读取原始输入事件,经。文件定义,路径通常为。
2026-03-25 17:57:07
88
原创 【嵌入式开发】input-event-codes.h文件详解
本文介绍了Linux输入子系统的核心头文件input-event-codes.h,该文件定义了用户空间与内核间传递输入事件的标准常量。主要内容包括:1)input_event数据结构及其type、code、value字段;2)主要事件类型如EV_KEY、EV_ABS等及其应用场景;3)同步事件EV_SYN的子代码功能;4)按键事件EV_KEY的各类子代码分类;5)绝对坐标事件EV_ABS的坐标轴定义;6)设备属性查询和I/O控制接口;7)推荐使用getevent和evtest工具进行调试。该文件是理解和开发
2026-03-24 19:04:47
526
原创 Android开发:InputReader::loopOnce()详解
将本次循环累积的所有NotifyArgs从移动到局部变量notifyArgs,同时清空准备下一轮循环。这是一种高效的“批量取走”模式,避免在锁内长时间持有大量数据。遍历notifyArgs更新,用于记录最近使用的设备 ID(可能用于后续事件处理策略)。高效的事件批处理:通过累积多个事件,一次性传递给,减少线程间唤醒次数。锁粒度精细化:只在访问共享数据时加锁,耗时操作(如和向监听器分发)都在锁外进行,避免阻塞其他线程。避免死锁:在调用之前释放锁,防止与的交叉调用导致死锁。支持超时机制:通过。
2026-03-23 19:29:46
324
原创 Android开发:InputReader::processEventsLocked详解
职责明确的分层EventHub负责读取内核数据,负责初步转换,负责分发,各司其职。高效的批处理:将同一设备的事件打包处理,并在flush时一次性批量传递给分发器,减少了线程间唤醒和同步的开销。可扩展的Mapper模式:通过来处理不同类型的输入设备,使得添加对新输入设备的支持变得模块化和灵活。同步与异步解耦:使用作为缓冲区,确保了处理事件的线程不会因的繁忙而阻塞,保障了底层事件读取的及时性。
2026-03-23 19:05:24
377
原创 [技术篇] Android11上导入GMS后,登录Google账号提示“您的账号未成功添加”问题。
在登录Google账号时,一直提示“您的账号未成功添加,请重试!”。遇到这问题时,一开始以为账号有问题,但在windows下可以正常使用。然后怀疑是不是apk版本问题,替换多版后还是无法解决。
2022-07-27 20:12:21
6696
2
原创 【技术篇】Android开发中判断当前网络是否可上网,而不是判断是否连接
以上代码初看并未发现问题,然而仔细分析发现isNetworkAvalible()方法只能判断当前网线是否接入,假如使用的是静态IP,即使网线不接,返回的也是true.问题的根本原因就是这个接口不能判断出静态IP或者网络不能上网的情况.目前网络上很多方法都是获取到的网络连接状态,并不能判断网络是否可以正常上网,以上方法可以解决这个问题,不过有时候ping的时候会比较慢一些.最近开发中遇到一个bug,在设置日期和时间时,手动设置时间,开关机时间正常.使用自动获取网络时间,连接可上网的网络,获取时间也是正常...
2022-07-16 16:48:13
1269
原创 【Android11系统开发】上层app通过AIDL监听framework数据
一、适用场景:在Android系统开发中,需要监听按键、触摸、或者可见窗口大小变化等需求时,你会考虑什么方法来实现呢?通过广播的方式可以实现,但是效果可能并不好。AIDL可以实现跨进程通讯,可以解决以上需求。下面重点分析下如何具体实现,以实现按键监听功能为例,代码按实现后的调用先后来说明。二、代码说明以及分析实现:大致的流程图如下 1、在frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java文件
2022-07-13 15:31:30
1046
原创 关于报错signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0x7252e0c9b8的分析
最近遇到一个报错,通过打印不能明确定位具体报错位置,查找了很久才找到大概位置,记录一下。详细报错如下:引起报错是 Cause: stack pointer is not in a rw map; likely due to stack overflow. 堆栈指针不在rw映射中,可能是堆栈溢出引起。通过打印只能确定com.skg.services报错,通过反复对比验证最近修改内容。最终发现是一个so更新后出现报错,还原回之前so正常。在异常时也可以通过打印发现可疑点,在上图报错后,so的调用也会出现报错。
2022-07-02 16:31:22
5843
2
原创 【工具篇】Android下busybox工具的使用说明
【使用场景】在MTK TV平台下,Android系统开发中,我们有可能需要通过串口或者ADB在线修改固件中某些配置文件。 系统中一般没有Vi编辑工具,在这种情况下可以使用busybox工具进行在线编辑、保存文件。【步骤】1、比如修改文件:vendor/etc/wifi/wifi.cfg,可以在命令行下输入以下命令即可打开文件:命令:busybox vi vendor/etc/wifi/wifi.cfg2、打开文件后输入小写字母“ i ”进入编辑模式。3、修改后按Esc退出编辑模式
2022-05-13 14:09:03
2210
原创 使用AndroidStudio创建项目时报错Could not resolve的解决方法
在使用AndroidStudio 3.3.1版本创建项目的时候,遇到报以下错误问题。报错:ERROR: Unable to resolve dependency for ':app@debug/compileClasspath': Could not resolve com.android.support:appcompat-v7:32.+.ERROR: Unable to resolve dependency for ':app@debug/compileClasspath': Could not
2022-05-09 15:22:14
4883
原创 git使用说明:提交源码到git上
你有一个空的仓库要开始使用,您需要在终端中运行这些命令。第一次配置Gitgit config --global user.name "xxx"git config --global user.email "xxx@126.com"使用您的存储库我只想克隆这个存储库如果要简单地克隆此空存储库,请在终端中运行此命令。git clone http://192.168.0.123:7990/scm/cusrelease/code_release.git我的代码已经准备好推送
2022-02-23 20:35:37
298
原创 Android9.0适配HID标准协议的USB触摸屏
问题:在项目中遇到客户需要使用第三方USB触摸屏,协议是标准的HID协议。此时USB触摸屏类似于鼠标、键盘等外设,直接接在电脑上触摸是正常的,但接在我们平台的主板端无法识别。使用lsusb查看,可以看到设备PID/VID;使用getevent查看,没有相关的设备。说明系统并未识别到该触摸屏,随便插入鼠标、键盘都可以查看到。分析:USB识别不到,需要在kernel下添加相关的HID配置,VID、PID需要配置进去,免驱的设备直接配置即可。代码修改:1、主要三个文件需要修改hid-multito
2022-01-14 14:33:11
7180
原创 Android8.0平台摄像头camera花屏问题
使用场景:在会议平台上经常使用摄像头会议视频,市场上摄像头也是各式各样,2K、4K的都很多,还有一些网络摄像头。遇到问题:插上摄像头,软件打开摄像头,画面显示花屏或者黑屏。问题分析:通过抓取log分析,怀疑是摄像头分辨率跟上层软件设置的分辨率不匹配,也可能是分辨率过大导致内存溢出。代码修改:文件路径:vendor/mstar/hardware/camera/HAL/CameraHardware.cpp 不一样的平台路径存在差异,本人使用的是Mstar平台。1、在该文件下有个tryC..
2021-07-16 15:20:21
1501
原创 Android8.0平台使用第三方会议视频软件无声音
在做方案时,经常遇到客户需要预装第三方软件,由于第三方软件千奇百怪,没有经过适配不一定可以直接使用,即使可以使用也可能存在一些问题。今遇到客户要求使用Teams、Zoom等会议视频软件,视频软件最重要的就是视频通话、语音通话。直接安装软件后发现,通话时无声音。通过跟踪分析发现,framework下在处理声音时,有些config需要适配,否则声音不会输出。这个config主要是声音通道的切换,第三方软件大部分都使用的是喇叭输出。对于遇到的问题,本人只作了很小的改动。文件路径:framework
2021-07-16 11:28:38
987
原创 Android8.0中外接USB Audio设备无法控制音量问题
最近在开发过程中,很多客户需要定制USB Audio设备用于会议时当麦克音箱使用,但是Android原生系统对外接USB Audio设备的兼容性并不好,特别是外设厂商五花八门,可能标准都不一样。
2021-06-11 17:30:37
2718
3
原创 Android系统开发中遇到的蓝牙问题
一、关于蓝牙的加载流程1,插入USB蓝牙后,bluedroid会读取设备型号,然后添加设备,同时会去打开蓝牙驱动2,蓝牙驱动的打开是调用的安卓标准的硬件设备流程,BluetoothManagerService会调用jni,jni会通过调用hardware下面的hw_get_module来获取蓝牙库文件,(system/lib/hw/)。3,hw_get_module在获取到后,会调用内核rtk_btusb去打开设备,这里面会去获取设备的firmware,然后就能正常打开设备。...
2021-06-08 14:09:30
2094
1
原创 《Linux开发中关于I2C和寄存器的读写方式探讨|寻找C站宝藏》
在做Android系统开发时,特别是现在智能显示和物联网,经常客户会要求搭配各种外接模块。Android系统与外接模块的通讯方式主要有I2C通讯、USB通讯、串口UART通讯、蓝牙通讯等。我们现在只探讨下I2C通讯。I2C通讯又分两种,一种是通过读写寄存器;一种是不带寄存器直接读写I2C。读写寄存器的方式也存在差异,此文以Mstar平台来说明。1、读写I2C下寄存器数据现以读写光感模块ISL29023为列说明。首先需要定义I2C设备的地址:ISL29023_IIC_ADD然后获取I2C设
2021-06-04 16:55:59
1626
1
原创 Android8.0修改默认浏览器网站
在Android开发中经常遇到客户要求把默认浏览器换成客户想要的,此时我们可以在代码中重新设置一下客户要求的URL。
2021-06-04 15:27:50
657
原创 Android学习之自定义控件-圆环进度条加内圆填充进度
最近由于工作的需求,需要制作一些自定义控件来实现相关的功能。现把自己最近做的几个控件记录下来,希望也能帮助大家,不足之处望大家指点,多多交流,一起学习一起进步!今天实现的是一个自定义圆环进度条,同时随着进度,内圆需要不断填充。先看看效果图:下面看看具体的显示过程,创建项目的步骤就跳过了1、在res-values目录下新建attrs.xml文件,添加自定义CircleProces
2015-01-30 14:52:48
2776
原创 关于 No resource found that matches the given name 'Theme.AppCompat.Light'问题的解决
在导入本地项目时候,经常出现“error: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Light'.”问题。导致这问题是由于缺少Theme.AppCompat.Light这个主题产生的,这个主题存在于android\support\appcom
2015-01-30 14:07:47
782
原创 Android开发中设置无标题
1、在开发Android软件时,一般开发的主界面都是没有标题的。在Activity的OnCreate方法中添加代码如下public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_
2013-09-25 14:07:05
956
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅