kotlin写的android 录音实例(需要动态申请权限),利用 mediaRecorder 实现

这是一个简单的android 录音单元功能实现的源码,不涉及其他线程或服务之类的深入知识,详细针对 mediaRecorder 实现录音功能做记录和解析。
一 静态权限

现在的Android机已经普遍都是6.0以上的系统了,所以很多权限是需要动态申请的,这里录音权限就需要进行动态申请,我们把需要的权限先在 manifest.xml 文件中静态声明一下

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>

用到的就是上面这三个,包括存储空间的读,写,录音权限
这里只是静态权限的申请,6.0以上的系统还需要动态申请权限,后面的代码会逐步解析。

二 录音文件存放的位置

这里要说明的是,从Android 7.0 之后,系统加强了SD卡的权限管理,即使App声明了完整的SD卡操作权限,系统仍然默认禁止该App访问外部存储。不过系统默认关闭的存储只是外部存储的公共空间,而外部存储的私有空间依然可以正常读写。这个私有空间是只有应用自己才可访问的专享空间,而当这个APP卸载时这个空间也就一起被清理掉了。

在网上很多源码中提到使用 Environment.getExternalStroagePublicDirector 方法获取文件的存放路径,但其实这个方法在比较高版本的SDK中已经废弃了,当使用AS写代码时会有废弃的提示。因为这个方法返回的是公共空间的地址,App自身要操作这个空间很多时候是无法使用的。

那么我们就要获取App的私有空间地址,这里要用到的方法就是 getExternalFilesDir() 。这个方法返回的是一个File类的对象,详细的用法可参考这篇文章app私有空间路径的获取

简单的示例如下

var privatePath = getExternalFilesDir(null).toString()

这个 privatePath 获取的路径位于 “外部存储根目录/Android/data/应用包名/files” 下,注意这里最后是没有 “ / ” 的,也就是说后期要组合一些其他的下级文件路径不要忘了给它后面加“ / ”

三 录音API mediaRecorder 的使用

这个的用法还是挺简单的,下面直接通过源码说明

(1)布局文件源码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <TextView
    
参考链接http://www.cnblogs.com/Amandaliu/archive/2013/02/04/2891604.html 在链接内容基础上修改了amr编码格式为aac编码格式 Android提供了两个API用于实现录音功能:android.media.AudioRecord、android.media.MediaRecorder。 网上有很多谈论这两个类的资料。现在大致总结下: 1、AudioRecord 主要是实现边录边播(AudioRecord+AudioTrack)以及对音频的实时处理(如会说话的汤姆猫、语音) 优点:语音的实时处理,可以用代码实现各种音频的封装 缺点:输出是PCM语音数据,如果保存成音频文件,是不能够被播放器播放的,所以必须先代码实现数据编码以及压缩 示例: 使用AudioRecord类录音,并实现WAV格式封装。录音20s,输出的音频文件大概为3.5M左右(已测试代码) 2、MediaRecorder 已经集成了录音、编码、压缩等,支持少量的录音音频格式,大概有.aac(API = 16) .amr .3gp 优点:大部分以及集成,直接调用相关接口即可,代码量小 缺点:无法实时处理音频;输出的音频格式不是很多,例如没有输出mp3格式文件 示例: 使用MediaRecorder录音,输出amr格式文件。录音20s,输出的音频文件大概为33K(已测试代码) 3、音频格式比较 WAV格式:录音质量高,但是压缩率小,文件大 AAC格式:相对于mp3,AAC格式的音质更佳,文件更小;有损压缩;一般苹果或者Android SDK4.1.2(API 16)及以上版本支持播放 AMR格式:压缩比比较大,但相对其他的压缩格式质量比较差,多用于人声,通话录音 至于常用的mp3格式,使用MediaRecorder没有该视频格式输出。一些人的做法是使用AudioRecord录音,然后编码成wav格式,再转换成mp3格式 再贴上一些测试工程。 功能描述: 1、点击“录音WAV文件”,开始录音录音完成后,生成文件/sdcard/FinalAudio.wav 2、点击“录音AMR文件”,开始录音录音完成后,生成文件/sdcard/FinalAudio.amr 3、点击“停止录音”,停止录音,并显示录音输出文件以及该文件大小。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值