- 博客(420)
- 资源 (44)
- 收藏
- 关注
原创 Android 车联网——汽车系统介绍(附2)
汽车系统指的是由多个模块或组件组成的系统,如发动机系统、制动系统、空调系统等,这些系统通常由多个 ECU 协同工作来完成特定的任务。
2024-09-13 09:17:35 666 2
原创 Android 车联网——汽车模块介绍(附1)
汽车模块指的是车辆中独立的电子控制单元(ECUs),如发动机控制单元(ECU)、车身控制模块(BCM)等,它们负责特定的功能或系统。
2024-09-13 09:17:05 666
原创 Android 车联网——CarProperty使用实例(二十三)
在熟悉了 Car 下的相关 Manager 和 Service 后,这里我们通过需求来实现 CarProperty 的使用实例。
2024-09-12 08:55:58 652
原创 Android Radio2.0——有效电台扫描(八)
上一篇文章在我们拿到了电台动态列表,接下来我们继续按照最初的思路执行 scan() 进行电台搜索操作。1)通过 getDynamicProgramList() 方法获取动态列表。2)按照动态列表的内容,循环调用 scan() 方法执行向上调台,直到列表中的内容搜索完成。3)根据 RadioManager.ProgramInfo.getSignalStrength() 判断信号质量,生成一个有效电台列表。4)回调监听扫描状态及有效电台列表的变化。
2024-09-12 08:55:39 785
原创 Android Radio2.0——动态列表回调(七)
上一篇文章我们主要介绍了电台动态列表的获取流程,这里我们主要处理对应的回调流程以及扫描流程。1)通过 getDynamicProgramList() 方法获取动态列表。2)按照动态列表的内容,循环调用 scan() 方法执行向上调台,直到列表中的内容搜索完成。3)根据 RadioManager.ProgramInfo.getSignalStrength() 判断信号质量,生成一个有效电台列表。4)回调监听扫描状态及有效电台列表的变化。
2024-09-11 09:10:18 963
原创 Android Radio2.0——电台动态列表(六)
通过前面的文章分析,这个动态列表我认为就是生产厂商配置的一个该区域所有电台的列表,我们调台的过程就是一个个的查看对应列表中的电台频率是否可以正常播放。
2024-09-11 09:09:59 448
原创 Android Radio2.0——广播中的PI码(五)
在 Android Radio 中,PI 码(Program Identifier)是 RDS 系统的一部分,用于标识广播电台。PI 码是 RDS 数据流中的一个重要组成部分,它帮助接收设备识别正在接收的广播电台,并且可以用于实现各种高级功能。
2024-09-10 17:23:53 412
原创 Android Radio2.0——公告监听设置(四)
上一篇文章我们介绍了广播公告的注册及监听设置,这里我们来看一下广播公告添加监听的调用流程。
2024-09-10 17:23:25 540
原创 Android Radio2.0——公告注册及监听(三)
定义:交通公告是指在广播中插入的特别信息,通常是关于交通状况的重要通知,比如交通事故、道路封闭、交通拥堵等。目的:目的是让驾驶者及时了解道路上的情况,以便调整行驶路线,避免拥堵或事故区域。触发机制:交通公告可以通过手动触发(例如,广播员决定播放一条交通信息),也可以通过自动化系统触发(例如,交通监控系统检测到事故后自动发送信息)。技术实现:在RDS广播中,TA标志用来标记包含交通信息的广播。当接收设备设置了接收TA信息时,会优先播放这些信息,即使打断了当前正在播放的节目。
2024-09-05 09:03:52 522
原创 Android Radio2.0——交通公告状态设置(二)
定义:交通公告是指在广播中插入的特别信息,通常是关于交通状况的重要通知,比如交通事故、道路封闭、交通拥堵等。目的:目的是让驾驶者及时了解道路上的情况,以便调整行驶路线,避免拥堵或事故区域。触发机制:交通公告可以通过手动触发(例如,广播员决定播放一条交通信息),也可以通过自动化系统触发(例如,交通监控系统检测到事故后自动发送信息)。技术实现:在RDS广播中,TA标志用来标记包含交通信息的广播。当接收设备设置了接收TA信息时,会优先播放这些信息,即使打断了当前正在播放的节目。
2024-09-05 09:03:32 878
原创 Android Radio2.0——设置广播配置标志(一)
在 Android Radio 中,RDS (Radio Data System) 是一种在调频(FM)广播信号中嵌入数字信息的技术,它可以携带额外的数据信息,如电台名称、节目信息等。
2024-09-04 08:56:43 659
原创 Android Audio分区——设置关联用户(六)
在音频分区的相关 API 接口中有一个比较重要的功能,就是设置关联用户。在介绍设置关联用户之前我们先来看两个比较重要的概念,设备亲和性和音频混合策略。
2024-09-04 08:56:03 353
原创 Android Audio分区——API接口详解(五)
上一篇文章介绍了音频分区的相关 API 接口,这里我们来看一下 CarAudioManager 中对应接口的实现。通过前面的文章我们知道,对应 CarAudioManager 中接口的实现都是在 CarAudioService 完成的。
2024-09-03 09:01:52 391
原创 Android Audio分区——音频分区相关API(四)
上一篇文章我们介绍了车载多区音频的相关基础内容以及相关配置文件,这里我们看进一步看一下音频分区的相关代码,想要快速了解音频分区相关功能,首先从其相关接口开始。
2024-09-03 09:00:13 531
原创 Android Audio分区——音频分区加载流程(三)
上一篇文章介绍了车载多区音频基础,并且知道每个音频区都在 car_audio_configuration.xml 文件中进行配置的,这里我们就来看一下音频分区的解析过程。
2024-09-02 09:02:22 904
原创 Android Audio分区——音频分区管理(二)
对于前面介绍的关联用户的相关功能,其实就是相当于 Audio 模块的多用户开发,这里我们再来看一下音频分区的管理工作。
2024-09-02 09:01:45 360
原创 Android Audio分区——车载多区音频基础(一)
汽车音频服务使用 Core Audio 动态音频政策来为车载使用场景提供协助。为每位乘客单独播放音频(称为多区音频),其中每个音频区允许并发播放声音。动态音频区配置。乘客主区音频投放。乘客的音频镜。在每个用例中,车载音频服务都使用动态音频政策自动将音频路由到指定的输出设备。
2024-08-29 09:21:09 629
原创 Android Audio实战——自适应音量值适配(三)
上一篇文章《音频配置资源定制》介绍了通过车型 Code 的不同,加载不通的 Audio 配置文件,而在《自适应音量值修改》又使用了 overlay 的方式定制不同车型的自适应音量。那么问题来了,通过修改车辆的配置字无法修改 overlay 中的资源,因为 overlay 依赖编译的时候 lunch 项目实现的,所以在实现自适应音量的时候也需要通过车辆的配置自适应不同的音量值。 参考前面两篇文章,首先定义一个车型与配置字的映射关系。文件位置:/device/xxx/audio/sa8155_xx
2024-08-29 09:19:50 520
原创 Android Audio基础——音频模式设置(十九)
在《音频属性设是置》中介绍使用 setParameters 设置音频属性时,就是以设置音频模式及为例进行讲解的,其实在 AudioManager 中同样存在一个接口用来设置音频模式的,这里我们就来看一下。
2024-08-28 22:02:18 1028
原创 Android Audio音量——硬按键调节音量(七)
前面的文章已经介绍了音量调整及静音设置的相关调用,这里我们来梳理一下通过硬按键来调节音量及静音的相关调用流程。
2024-08-28 22:01:40 670
原创 Android Radio实战——收藏/有效电台保存(二十二)
前面的文章介绍了 Radio 相关操作,但是对于 RadioManager 并没有提供电台收藏和有效电台列表的相关保存/获取功能,所以这里我们可以使用本地数据库来完善对应功能。
2024-08-27 09:13:48 556
原创 Android Radio实战——有效电台列表(十六)
对于有效电台列表对应的其实就是前面文章中的自动搜索功能,由于系统并未提供自动搜索功能,所以这里的有效电台列表其实也是一个自定义的功能。
2024-08-27 09:09:39 507
原创 Android SurfaceFlinger——共享内存读写流程(五十五)
通过上一篇文章的介绍,我们知道了应用进程与 SurfaceFlinger 进程之间的跨进程通信最终选择匿名共享内存的方式实现。并了解了共享内存基本使用方法,这里我们继续了解一下共享内存的粗写操作。
2024-08-26 09:40:04 418
原创 Android SurfaceFlinger——SF跨进程通信(五十四)
在 Android 系统中,由于每个应用程序默认运行在自己的进程中,为了实现不同应用或同一应用的不同组件之间的交互,就需要跨进程通信(IPC)。而 Socket 通信、Binder 通信和共享内存都是实现进程间通信(IPC)的方式,但它们各有特点和适用场景。
2024-08-26 09:39:41 357
原创 Android SurfaceFlinger——Vsync监听逻辑(五十三)
上一篇文章我们介绍了 SurfaceFlinger 发送 Vsync 信号的流程以及信号的相关处理,这里我们来看一下 Vsync 信号的监听回调逻辑。
2024-08-08 08:58:04 697
原创 Android SurfaceFlinger——Vsync信号发送(五十二)
通过上一篇文章我们创建了一个 EventThread 线程,并且它持有了 SurfaceFlinger 中 resyncWithRateLimit() 方法的指针。这里我们主要来看一下 EventThread 对信号的处理。
2024-08-08 08:57:43 1050
原创 Android SurfaceFlinger——信号同步原理(五十一)
垂直同步(Vertical Synchronization,简称 VSync)是一种用于同步视频信号和显示设备刷新率的技术,以确保视频帧的显示与屏幕的刷新周期相匹配。VSync 对于防止屏幕撕裂(tearing)、保证图像的连贯性和减少输入延迟非常重要。
2024-08-07 09:13:19 530
原创 Android SurfaceFlinger——Fence流转状态(五十)
fence 本质上对应上内核中一个文件描述符 sync_file,sync_file 中有一个核心的 fence 结构体,用于预计释放的时间点。所有的 fence 都是以 sync_timeline 为基准进行递增的。sync_timeline 作为内核记录已经渲染屏幕多少个时间点,每一次通过 hwc_set 都会递增一个时间点,并且会尝试的唤醒关联在 sync_timeline 中 active_list 中 sync_pt 的 fence 的阻塞。
2024-08-07 09:13:03 551
原创 Android SurfaceFlinger——同步围栏Fence(四十九)
在 Android 的 SurfaceFlinger 组件中,围栏(Fence)是一种用于同步不同系统组件间操作完成的机制。围栏的概念来源于硬件图形加速器(如 GPU)和其他系统服务(如 SurfaceFlinger)之间的同步需求。在图形渲染和显示的过程中,多个组件可能会并发地访问共享资源(如缓冲区),为了确保数据的一致性和操作的正确顺序,就需要一种机制来协调这些操作,这就是围栏的作用。
2024-08-06 09:17:21 643
原创 Android SurfaceFlinger——渲染完成帧显示(四十八)
帧渲染完成后下一步就是将帧缓冲区(framebuffer)的内容发送到显示设备进行显示,也是 SurfaceFlinger 处理渲染合成的最后一步。1.更新输出设备的色彩配置文件2.更新与合成相关的状态3.计划合成帧图层4.写入合成状态5.设置颜色矩阵6.开始帧7.准备帧数据以进行显示(异步方式)8.准备帧数据以进行显示(同步方式)9.处理显示输出设备的可选重绘闪烁10.结束帧11.将渲染完成的帧缓冲发布到显示设备12.进行渲染缓存设置。
2024-08-06 09:16:54 687
原创 Android SurfaceFlinger——渲染结束帧(四十七)
介绍完屏幕重绘闪烁问题处理后,下面就到了整个图像合成的第 10 步,结束帧渲染操作,这里我们就继续分析该流程。1.更新输出设备的色彩配置文件2.更新与合成相关的状态3.计划合成帧图层4.写入合成状态5.设置颜色矩阵6.开始帧7.准备帧数据以进行显示(异步方式)8.准备帧数据以进行显示(同步方式)9.处理显示输出设备的可选重绘闪烁10.结束帧11.将渲染完成的帧缓冲发布到显示设备12.进行渲染缓存设置。
2024-08-05 09:57:27 499
原创 Android SurfaceFlinger——重绘闪烁处理(四十六)
直接重绘到屏幕:在某些情况下,应用程序直接在屏幕缓冲区上进行绘制,当绘制完成时,新内容立即显示出来,如果绘制速度不够快,用户可能会看到屏幕内容的瞬间变化。双缓冲机制不完善:双缓冲是一种常用的技术,用于减少重绘闪屏。在这种机制下,应用在一个独立的后台缓冲区进行绘制,绘制完成后,后台缓冲区的内容被交换到前台显示。但如果双缓冲的实现不完全,例如在缓冲区交换时出现延迟,或者在绘制过程中部分区域未能正确遮挡,仍然可能导致闪屏。
2024-08-05 09:57:03 531
原创 Android SurfaceFlinger——帧数据准备完成(四十五)
上一节我们介绍了准数据准备过程中选择合成策略的同步和异步操作,在选择合成策略完成后还会调用以下两个函数:applyCompositionStrategy:应用合成策略。finishPrepareFrame:完成帧的准备过程。
2024-08-01 08:53:48 458
原创 Android SurfaceFlinger——准备帧数据(四十四)
通过前面的文章我们介绍了 SurfaceFlinger 图层合成的整体流程,并且上一篇已经介绍了帧渲染流程的第一步,这里我们继续介绍帧渲染的准备工作——准备帧数据。1.更新输出设备的色彩配置文件2.更新与合成相关的状态3.计划合成帧图层4.写入合成状态5.设置颜色矩阵6.开始帧7.准备帧数据以进行显示(异步方式)8.准备帧数据以进行显示(同步方式)9.处理显示输出设备的可选重绘闪烁10.结束帧11.将渲染完成的帧缓冲发布到显示设备12.进行渲染缓存设置。
2024-08-01 08:53:31 1068
原创 Android SurfaceFlinger——渲染开始帧(四十三)
开始帧通过前面的文章我们介绍了 SurfaceFlinger 图层合成的整体流程,已经对应步骤的前五步,这里我们开始介绍帧渲染流程的第一步——开始帧。1.更新输出设备的色彩配置文件2.更新与合成相关的状态3.计划合成帧图层4.写入合成状态5.设置颜色矩阵6.开始帧7.准备帧数据以进行显示(异步方式)8.准备帧数据以进行显示(同步方式)9.处理显示输出设备的可选重绘闪烁10.结束帧11.将渲染完成的帧缓冲发布到显示设备12.进行渲染缓存设置。
2024-07-31 08:51:28 953
原创 Android SurfaceFlinger——合成预测与状态写入(四十二)
计划合成预测前一篇文章我们介绍了 SurfaceFlinger 图层合成的整体流程,并对前两个流程更新色彩配置和更新合成状态进行了介绍,这里我们接着解析下面的流程。1.更新输出设备的色彩配置文件2.更新与合成相关的状态3.计划合成帧图层4.写入合成状态5.设置颜色矩阵6.开始帧7.准备帧数据以进行显示(异步方式)8.准备帧数据以进行显示(同步方式)9.处理显示输出设备的可选重绘闪烁10.结束帧11.将渲染完成的帧缓冲发布到显示设备12.进行渲染缓存设置。
2024-07-31 08:50:40 422
原创 Android SurfaceFlinger——SF图层合成(四十一)
上一节我们简单介绍了 SurfaceFlinger 中的图层预的流程,这里我们继续往下看,SurfaceFlinger 的真正核心——图层合成。output->present:进行 Layer 合成。
2024-07-30 09:07:45 662
原创 Android SurfaceFlinger——SF图层预合成(四十)
为了便于理解,我们假设有一个简单的场景,其中包含一个图层 L,该图层可能有透明、不透明、阴影以及被其他图层覆盖的部分。下面将逐步介绍这些区域是如何计算的。
2024-07-30 09:07:25 566
原创 Android SurfaceFlinger——SF图层合成准备(三十九)
SurfaceFlinger 是 Android 系统中负责窗口管理和图像合成的核心组件,它主要负责将多个应用程序的界面(称为图层或表面)合并成一个单一的图像,然后将这个图像输出到显示设备上。
2024-07-29 09:35:32 726
原创 Android SurfaceFlinger——缓冲区的消费流程(三十八)
前面介绍了 SurfaceFlinger 对提交帧的处理以及缓冲区的锁定等流程,这里我们看一下 SurfaceFlinger 对缓冲区的消费流程。
2024-07-29 09:35:08 302
Android控件的简单使用
2015-02-16
Fragment使用
2015-01-20
ContentProvider测试Demo
2015-01-14
添加查询联系人信息
2015-01-14
HCI Log分析工具-CPAS-11
2024-04-17
Android Audio相关流程时序图
2023-11-30
Android Radio相关流程时序图
2023-09-01
本地实现U盘扫描SDK部分代码
2022-10-28
开发调试所使用的各种格式音视频
2022-07-20
Android端Socket实现聊天功能
2021-10-11
SocketDemo.zip
2021-09-24
断点续传下载
2015-05-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人