Android开发手记(31) 使用MediaRecorder录音
使用Android手机的时候,有时我们会用到录音功能,本文简单的介绍了如何使用MediaRecorder通过手机自带麦克风进行录音。
首先,既然是录音,我们需要录音和写外存的权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
然后,我们创建一个录音的方法startRecord(),当我们单击录音按钮时调用这个方法来进行录音。录音的过程为:
(1)确定录音的文件的存放位置
(2)实例化一个MediaRecorder对象,并设置其参数
(3)调用MediaRecorder.prepare()准备录音
(4)调用MediaRecorder.start()开始录音
public void startRecord(){
if(mr == null){
File filePath = new File(Environment.getExternalStorageDirectory(), "myRecord");
File fileName = new File(filePath, System.currentTimeMillis() + ".amr");
try {
if (!filePath.exists()) {
filePath.mkdirs();
}
if (!fileName.exists()) {
fileName.createNewFile();
}
} catch(IOException e){
e.printStackTrace();
}
mr = new MediaRecorder();
mr.setAudioSource(MediaRecorder.AudioSource.MIC); // 设置录音的输入源
mr.setOutputFormat(MediaRecorder.OutputFormat.AMR_WB); // 设置输出格式
mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB); // 设置编码格式
mr.setOutputFile(fileName.getAbsolutePath()); // 设置输出文件名
try{
mr.prepare();
mr.start();
textView.setText("文件名:"+fileName.getAbsolutePath());
} catch(IOException e){
e.printStackTrace();
}
}
}
然后我们创建一个方法stopRecord()来停止录音,调用MediaRecorder.stop()可以停止录音,调用MediaRecorder.release()释放录音对象。然后将MediaRecorder指针置空以便下一次录音可以实例化新的MediaRecorder对象。
public void stopRecord(){
if(mr != null){
mr.stop();
mr.release();
mr = null;
}
}
最后,在MainActivity中为按钮添加单击事件,并调用上述方法即可实现录音。完整代码如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.doodle.myapplication"> <application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/> </manifest>
import android.app.Activity;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;
import android.widget.TextView; import java.io.File;
import java.io.IOException; public class MainActivity extends Activity { private Button button;
private TextView textView;
private boolean isStart = false;
private MediaRecorder mr = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); button = (Button)findViewById(R.id.button);
textView = (TextView)findViewById(R.id.textView);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(isStart){
startRecord();
button.setText("停止录音");
isStart = false;
}
else {
stopRecord();
button.setText("开始录音");
isStart = true;
}
}
}); } public void startRecord(){
if(mr == null){
File filePath = new File(Environment.getExternalStorageDirectory(), "myRecord");
File fileName = new File(filePath, System.currentTimeMillis() + ".amr");
try {
if (!filePath.exists()) {
filePath.mkdirs();
}
if (!fileName.exists()) {
fileName.createNewFile();
}
} catch(IOException e){
e.printStackTrace();
} mr = new MediaRecorder();
mr.setAudioSource(MediaRecorder.AudioSource.MIC); // 设置录音的输入源
mr.setOutputFormat(MediaRecorder.OutputFormat.AMR_WB); // 设置输出格式
mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB); // 设置编码格式
mr.setOutputFile(fileName.getAbsolutePath()); // 设置输出文件名 try{
mr.prepare();
mr.start();
textView.setText("文件名:"+fileName.getAbsolutePath());
} catch(IOException e){
e.printStackTrace();
}
}
} public void stopRecord(){
if(mr != null){
mr.stop();
mr.release();
mr = null;
}
} }
Android开发手记(31) 使用MediaRecorder录音的更多相关文章
- Android 开发手记一NDK编程实例
在Android上,应用程序的开发,大部分基于Java语言来实现.要使用c或是c++的程序或库,就需要使用NDK来实现.NDK是Native Development Kit的简称.它是一个工具集,集成 ...
- Android开发--仿微信语音对讲录音
原文地址:http://www.2cto.com/kf/201502/378704.html 自微信出现以来取得了很好的成绩,语音对讲的实现更加方便了人与人之间的交流.今天来实践一下微信的语音对讲的录 ...
- Android开发手记(28) Handler和Looper
Android的消息处理有三个核心类:Looper,Handler和Message.其实还有一个Message Queue(消息队列),但是MQ被封装到Looper里面了,我们不会直接与MQ打交道.平 ...
- Android开发手记(24) Log的使用及颜色的更改
在程序开发过程中,LOG是广泛使用的用来记录程序执行过程的机制,它既可以用于程序调试,也可以用于产品运营中的事件记录.在Android系统中,提供了简单.便利的LOG机制,开发人员可以方便地使用.本文 ...
- Android开发手记(22) 传感器的使用
Android的传感器主要包括八大传感器,他们分别是:加速度传感器(accelerometer).陀螺仪(gyroscope).方向传感器(orientation).磁力传感器(magnetic fi ...
- Android开发手记(18) 数据存储三 SQLite存储数据
Android为数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 SQLite 是以嵌入式为目的 ...
- Android开发手记(17) 数据存储二 文件存储数据
Android为数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 本文主要介绍如何使用文件来存储 ...
- Android开发手记(32) 使用摄像头拍照
在Android中,使用摄像头拍照一般有两种方法, 一种是调用系统自带的Camera,另一种是自己写一个摄像的界面. 我们要添加如下权限: <uses-permission android:na ...
- Android开发手记(30) 触摸及手势操作
触摸操作在现在智能手机系统中起到举足轻重的作用,本文将对安卓中的触摸以及一些简单手势的操作进行简单的介绍. 1.触摸 首先是关于触摸的判断,有两种方法可以判断的触摸操作. (1)setOnTouchL ...
随机推荐
- python处理LINUX的PWD文档
用冒号分隔的哟. 此章后面讲的JSON,配置文件读取,原理应该一样吧,只是要用合适的包去处理吧. CSV文档是用CSV包处理的. 文档: root:x:0:0:root:/root:/bin/bash ...
- 注意android裁图的Intent action
现在很多开发者在裁图的时候还是使用com.android.camera.action.CROP 来调用 startActivity(). 这不是个好主意. 任何不是依android开头的Action ...
- 通过dblink impdp导入
实验: 源数据库:10.5.129.160 dwhtest 需要导入的数据库:10.5.129.130 dwhtest 在10.5.129.130上创建DBLINK SQL> create p ...
- bzoj3143
之前我们曾经用dp解决过数学期望问题,这次我们用的是解方程的方法首先在编号之前,肯定要求出每条边的期望经过次数然后可以转化为求边端点的期望次数这种做法我一开始接触是noip2013的初赛问题求解,是类 ...
- 深入浅出Node.js (附录B) - 调试Node
B.1 Debugger B.2 Node Inspector B.2.1 安装Node Inspector B.2.2 错误堆栈
- 【转】git在eclipse中的配置
原文网址:http://www.cnblogs.com/zhxiaomiao/archive/2013/05/16/3081148.html 一_安装EGIT插件 http://download.ec ...
- 判断iis是否已经安装
判断iis是否已经安装? 访问http://127.0.0.1 能得到正确页面的是已经安装. 活者查看控制面板-添加删除程序-windows组件-internet信息服务(IIS)前面的没有打勾则没有 ...
- (转载)ubuntu安装pyton-pip问题解决
一.问题描述 root@ubuntu:/home/chao# apt-get install python-pip 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... ...
- scanf从文件中读入,printf写入到文件
重定向方式读写文件 #include <stdio.h> #define LOCAL int main() { #ifdef LOCAL freopen("input.txt&q ...
- Java获取当前路径
1.利用System.getProperty()函数获取当前路径:System.out.println(System.getProperty("user.dir"));//user ...