首页 > 系统 > Android > 正文

Android6.0源码分析之录音功能

2019-11-09 15:44:10
字体:
来源:转载
供稿:网友

从现在开始一周时间研究录音,下周出来一个完整的博客,监督,激励!!!

2017-02-09--------2017-02-17

Android源码录音功能说起来似乎也很简单,只不过就是一个录音的功能然后进行了一个保存的操作。为什么要研究这个呢?毕竟现在语音通话、直播亦或者是语音助手比较流行,其中其实最基础的还是对录音的一些处理,所以还是有必要研究一下的。

说起来功能简单,但其实单单是录音功能其中又夹杂着一些别的东西,比如UI的实时更新,电话等各种状态的监控,音量大小的监控。录音的保存也涉及到往手机中写数据,以及以何种格式写数据,比如当前流行的直播,音频流的传输到底以何种格式,手机可以播放什么样的格式,这些都会涉及。但是手机的原生系统应用录音机不支持文件的播放。

代码所在目录为android/packages/apps/SoundRecorder

先从编译开始说起

chapter one 录音机编译脚本文件-Android.mk

LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := optionalLOCAL_SRC_FILES := $(call all-subdir-java-files)LOCAL_PACKAGE_NAME := SoundRecorderLOCAL_PRIVILEGED_MODULE := trueinclude $(BUILD_PACKAGE)对于Android.mk文件的详细介绍可参考连接http://www.cnblogs.com/welhzh/p/4532142.html

简单介绍一下

LOCAL_MODULE_TAGS := optional表示模块在任何时候都参与编译

LOCAL_PACKAGE_NAME :=SoundRecorder表示编译完成后生成的应用名为SoundRecorder

LOCAL_PRIVILEGED_MODULD := true表示APP会安装在~/system/priv-app下拥有系统权限

编译脚本文件可以告诉我们APP的名字和APP会安装在哪里,以及APP是否参与编译

chapter two,模块的入口清单配置文件--Androidmanifest.xml

配置文件会告诉我们应用的入口,应用所需的权限以及应用的各种组件,看一个应用的复杂程度其实看配置文件即可

<manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.android.soundrecorder">    <original-package android:name="com.android.soundrecorder" />    <uses-permission android:name="android.permission.RECORD_AUDIO" />    <uses-permission android:name="android.permission.INTERNET" />    <uses-permission android:name="android.permission.WAKE_LOCK" />    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <application android:label="@string/app_name"                 android:icon="@drawable/ic_launcher_soundrecorder"                 android:usesCleartextTraffic="false">        <activity android:name="SoundRecorder"                android:configChanges="orientation|screenSize|keyboardHidden"                android:screenOrientation="unspecified"                android:clearTaskOnLaunch="true"                android:theme="@style/Theme.SoundRecorder">            <intent-filter>                <action android:name="android.intent.action.MAIN" />            </intent-filter>            <intent-filter>                 <action android:name="android.provider.MediaStore.RECORD_SOUND" />                 <category android:name="android.intent.category.DEFAULT" />            </intent-filter>        </activity>    </application></manifest>

权限有:

1>,android.permission.RECORD_AUDIO:allows an application to record audio允许程序录制音频

2>,android.permission.INTERNET:allows an application to open network sockets允许程序打开网络套接字,即允许程序进行联网

3>,android.permission.WAKE_LOCK: Allows using PowerManager WakeLocks to keep processor from sleeping or screen from dimming:允许程序使用电源屏幕锁保持手机不进入休眠或者变暗,即在录音时保持屏幕常亮

4>,android.permission.WRITE_EXTERNAL_STORAGE:允许往内存中写入数据

组件有:

该模块就注册了一个activity组件----SoundRecorder

组件下有一个clearTaskOnLaunch属性,由字面意思大家也可以看出来那就是再到launch界面后再次进入APP会清除栈内的activity重新加载,但这也得看系统的一些处理,如果系统按home回到launch就是要销毁所有activity的话那这个字段也没有任何意义了

组件的action为android.provider.MediaStore.RECORD_SOUND三方应用可通过调用该action来调起录音界面,亲测有效~~

chapter three src进入源码

界面布局文件:

main.xml

对应用进行整体浏览后发现录音所涉及到的知识由以下几个

1>,录音计时

2>,录音音量UI设计

3>,开始,暂停,继续录音

4>,停止录音

5>,播放录音

6>,以某种格式保存录音,文件类型支持amr,3gpp,aac,wav

7>,显示录音文件列表

其实总的来说也就是录音然后以某种格式保存的功能,只是在录音的过程中需要根据不同情况对UI进行一个更新。

接下来对单个功能进行分析之前首先是对各个view的id进行一个标记,方便以后对UI上做修改

ID标记完了之后我们基本上涉及到的UI上的修改都可以进行了,既然UI上的更新都是由录音功能衍生出来的,那就先从录音功能说起,顺带着分析再不同的状态下UI的显示变化


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表