android开发收音机

电脑杂谈  发布时间:2020-06-23 20:15:14  来源:网络整理

印度离线地图 安卓_安卓离线收音机_安卓 离线阅读器

[Android项目]本地FM广播开发和源代码分析

目录

1. 概述

本地FM()应用程序通过接收和解调频率调制(FM)或幅度,从而不同于Android手机硬件的调谐芯片的当前网络FM(喜马拉雅山,考拉等). 广播电台发出的电磁波的调制(AM)信号以播放并显示相应的节目信息. 因此,本地应用程序通常不需要联网,其核心取决于硬件调整芯片. 因此,并不是所有的手机都能收听本地广播,但是大多数手机都支持它们.

2. 广播的基本原理

广播的核心原理是: 广播播音员将设备处理过的音频信号广播为电信号,并携带它调制波的频率或幅度,然后发出. 通过信号放大和其他操作将信号输出到扬声器,以将电信号恢复为音频信号.

上面提到了两种调制方式: AM(调幅)/ FM(调频);

那为什么需要调制?

由于在正常情况下,人们可以听到的声音频率在20--20Khz之间. 声波的传输介质是空气,但衰减大,传输距离很短,大约几十米. 因此,直接使用声波进行传输是不现实的. 但是波在空中传播的媒介是电磁场,传播距离长. 因此,在将声波转换为电信号并用波对其进行调制后,它们具有远距离传输的特性.

AM(幅度调制)方法: 将信号波的信号调制到载波上,从而改变载波的幅度. 频率在503 --- 1060KHz之间

FM(调频)模式: 信号波的信号在载波上调制,从而改变载波的频率. 调频范围在我国为76-108MHz,在日本为87.5-108MHz,在日本为76-90MHz.

端接收信号并执行解调和放大,以通过扬声器恢复音频.

3. 其他信息RDS功能

安卓离线收音机_印度离线地图 安卓_安卓 离线阅读器

RDS代表“数据系统”无线数据广播系统;上面我们只讨论了信号波的传输. 如果只有信号波,则显示的信息将非常单调. 只能显示当前频率. 但是除了这些之外,广播电台还具有广播电台名称,节目信息,介绍和其他相关信息. 这时,有必要依靠RDS来完成. 它使用FM广播传输信号中的子载波以数字形式发送信息安卓离线收音机,例如电台名称. 在方面,信息通过具有RDS功能的调谐芯片进行解析和显示.

因此,使用RDS的前提是和调谐器芯片都必须同时支持RDS功能. 但目前只有少数广播电台支持RDS.

RDS具有两个核心功能: AF和TA;

AF表示当当前电台的信号低于某个特定值时,它将自动搜索该电台信号良好的其他频道并自动切换. 为了获得更好的用户体验.

TA功能是强制性的广播功能. 如果发生重大事故,紧急通知和其他交通信息,将被迫切换到该频率进行播放.

对于特定的RDS功能,您可以搜索[FM Radio_RDS功能概述和编码]以了解更多信息.

4. Android开发FM广播源代码分析

首先让我们看一下层次结构

硬件驱动程序(由芯片制造商提供)-> HAL(遵循HAL接口协议)-> C动态库(JNI调用)->框架(RadioManager)->应用程序(逻辑和接口).

RadioManager类隐藏在系统API中. 如果要在AndroidStudio中进行编译,则需要进行编译. 您可以自己咨询它,但应该始终获取framework.jar.

下面我用一个时序图来展示,让我们不要讨论如何在应用程序级别设计框架,让我们首先看看我们是否在App中调用tune(...)方法来播放某个广播电台,从框架开始,并经历了以下一些过程.

上面的时序图基于8.0的源代码. 实际上,9.0的源代码和8.0的之间有很多差异. 演示的结构变得越来越多,源代码中App的广播演示位于目录中:

android-8.0.0_r1 \ packages \ apps \ Car \ Radio \ src \ com \ android \ car \ radio \

安卓 离线阅读器_安卓离线收音机_印度离线地图 安卓

上面的时序图中似乎缺少什么?

HAL似乎与框架直接交互,中间不应有jni;所以我们找到目录

android-8.0.0_r1 \ frameworks \ base \ core \ jni \ android_hardware_Radio.cpp

我们知道jni扮演着链接Java和c的角色. 实际上,它是java中的方法与c中的方法或jni中对应于java的方法之间的映射,以及c的方法处理逻辑.

所以让我们看一下这些类的方法

RadioTMoudle.java中的方法:

在android_hardware_Radio.cpp中查看对应关系

我们看到了什么?

RadioTMoudle.java中的方法都在android_hardware_Radio.cpp中,但是方法名称都添加了固定前缀,这只是jni的特征. 说明这两个文件可以对应.

例如,手表

(void *)android_hardware_Radio_tune方法查看执行的操作

安卓离线收音机_印度离线地图 安卓_安卓 离线阅读器

再次查看ITuner.hal文件中的调整方法

似乎符合要求.

5. 如何在App层中设计本地FM应用程序

在上面,我们仅完成了Tuner的基础调用流程. 然后问题来了,我是进行FM本地应用程序开发的人,这些框架都已完成. 这跟我有什么关系实际上,否则,理解这些原理可以使我们在调试时更容易定义问题. 底层不对吗?对. 而且,在定制系统中,如果对进行了定制,则会根据需要修改底层安卓离线收音机,因此也很不稳定.

因此,如果您设计应用程序层的框架结构.

答案: 随需应变. .

假设我的需求是这样的,那么,实际上我的项目需求不是这样的.

别说话,看照片.

要求的简要说明:

1-主界面(发射器)下有一个控制面板,可以操作收音机.

2-单击控制面板的空白区域以打开单选页面. 可以操作和显示并保存接口. 状态与外部控制面板一致

印度离线地图 安卓_安卓 离线阅读器_安卓离线收音机

3-外部扩展控制,磁盘控制,语音控制等;

4-遵循音频聚焦策略

分析:

1-控制面板的显示: 与小部件桌面小部件一起显示. 通过广播与应用程序FM交互.

2-单击空白区域以打开并启动“活动”界面. 在界面上执行操作,但是您需要考虑的是,如果直接通过控制面板进行操作,则可以在不启动活动的情况下进行游戏. 因此,必须在后台运行CoreService核心服务,而不依赖于接口.

3-外部控制也应与Servicre互动. 需要考虑其可扩展性

4-监视焦点获取和丢失并执行逻辑处理.

设计:

经过以上分析,我们整理出以下核心要点

CoreService真正可操作的核心服务

活动主界面

小部件控制面板

代码设计模式: 可以自己看到,这里使用MVP模式. 然后将有两个演示者:

RaidoPresenter核心操作(包括音频处理)


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-255988-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 岩田光央
        岩田光央

        上次来过

      • 李遵顼
        李遵顼

        还有一点没吃过这种芝麻糊不知道的是

      • 姬宁族
        姬宁族

        如果你说日本后面的主子才是关键

      热点图片
      拼命载入中...