使用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录音的更多相关文章

  1. Android 开发手记一NDK编程实例

    在Android上,应用程序的开发,大部分基于Java语言来实现.要使用c或是c++的程序或库,就需要使用NDK来实现.NDK是Native Development Kit的简称.它是一个工具集,集成 ...

  2. Android开发--仿微信语音对讲录音

    原文地址:http://www.2cto.com/kf/201502/378704.html 自微信出现以来取得了很好的成绩,语音对讲的实现更加方便了人与人之间的交流.今天来实践一下微信的语音对讲的录 ...

  3. Android开发手记(28) Handler和Looper

    Android的消息处理有三个核心类:Looper,Handler和Message.其实还有一个Message Queue(消息队列),但是MQ被封装到Looper里面了,我们不会直接与MQ打交道.平 ...

  4. Android开发手记(24) Log的使用及颜色的更改

    在程序开发过程中,LOG是广泛使用的用来记录程序执行过程的机制,它既可以用于程序调试,也可以用于产品运营中的事件记录.在Android系统中,提供了简单.便利的LOG机制,开发人员可以方便地使用.本文 ...

  5. Android开发手记(22) 传感器的使用

    Android的传感器主要包括八大传感器,他们分别是:加速度传感器(accelerometer).陀螺仪(gyroscope).方向传感器(orientation).磁力传感器(magnetic fi ...

  6. Android开发手记(18) 数据存储三 SQLite存储数据

    Android为数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 SQLite 是以嵌入式为目的 ...

  7. Android开发手记(17) 数据存储二 文件存储数据

    Android为数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 本文主要介绍如何使用文件来存储 ...

  8. Android开发手记(32) 使用摄像头拍照

    在Android中,使用摄像头拍照一般有两种方法, 一种是调用系统自带的Camera,另一种是自己写一个摄像的界面. 我们要添加如下权限: <uses-permission android:na ...

  9. Android开发手记(30) 触摸及手势操作

    触摸操作在现在智能手机系统中起到举足轻重的作用,本文将对安卓中的触摸以及一些简单手势的操作进行简单的介绍. 1.触摸 首先是关于触摸的判断,有两种方法可以判断的触摸操作. (1)setOnTouchL ...

随机推荐

  1. MockupBuilder

    玩一下,想起了以前公司产品经理作的些事了...

  2. linux shell中的特殊符号

    该内容,均来自此网址(http://www.92csz.com/study/linux/12.htm).在下只是把那些命令的截图给去了. 你在学习linux的过程中,也许你已经接触过某个特殊符号,例如 ...

  3. keil C51中建立多文件时,变量重复定义的解决

    c/c++语言中有很多地方要用到extern,但是如果没有真正的了解它的意义,会给编程带来很大的麻烦,为了使大家少走弯路,特祥细的说明一下. 对于比较小的程序,一般只有一个c文件和一个头文件,全局变量 ...

  4. luoguP2267 琪琪的项链

    题目:http://www.luogu.org/problem/show?pid=2267 题解:这题略吊. 看了之后发现不能用组合数学直接得出公式,然后如果直接暴力也不知道如何去排除两个颜色序列相同 ...

  5. QTP自动化测试权威指南 连载(一)

    第一章 简介 什么是自动化测试 自动化测试是对一个已有的手工测试过程减少并尽可能排除人工干预的过程. 什么时候适合做自动化测试 下面是一组适合将手工测试自动化的考量因素: ● 测试需要经常重复. ● ...

  6. cocos2d的安装

    安装cocos2d其实就是在Xcode中安装几个模板,然后在Xcode里面就可以直接使用这些模板了. 其实说是模板,也就是封装了许许多多引擎的文件,相对于原生的程序,也许使用引擎模板更加方便.   下 ...

  7. google、baidu高级搜索技巧

    1.baidu(可以去高级搜索查看更多信息) intitle搜索范围限定在网页标题:intitle:和后面的关键词之间不要有空格----intitle:中国 site搜索范围限定在特定站点中:“sit ...

  8. UVa12171 hdu2771 UVaLive4291 Sculpture

    填坑系列(p.171) orz rjl 代码基本和rjl的一样 #include<cstdio> #include<cstring> #include<cstdlib&g ...

  9. 树莓派安装mjpg-streamer视频监控 分类: Raspberry Pi 2015-04-12 23:41 144人阅读 评论(0) 收藏

    原来使用Motion在树莓派上跑1280x720分辨率的三颗摄像头.占用内存太严重,关闭诸多功能之后还是不行.故转战mjpg-streamer. 首先安装所需软件 sudo apt-get insta ...

  10. 读TIJ -1 对象入门

    <Thinking In Java·第 1 章对象入门> 第 1 章约20页,是对面向对象的程序设计(OOP)的一个综述. 依照其前言所述: "当中包含对"什么是对象& ...