专栏首页恩蓝脚本Android编程实现录音及保存播放功能的方法【附demo源码下载】

Android编程实现录音及保存播放功能的方法【附demo源码下载】

本文实例讲述了Android编程实现录音及保存播放功能的方法。分享给大家供大家参考,具体如下:

在android中进行录音相对来说是比较简单的,使用系统提供的MediaRecorder类进行录音并保存,然后调用MediaPlayer进行播放。以下为xml配置文件代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context="com.example.kk.soundrecording.MainActivity"  
  <Button
    android:id="@+id/start"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="40dp"
    android:text="@string/start" / 
  <Button
    android:id="@+id/stop"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/start"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="40dp"
    android:text="@string/stop" / 
  <Button
    android:id="@+id/paly"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/stop"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="40dp"
    android:text="@string/paly" / 
  <Button
    android:id="@+id/pause_paly"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/paly"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="40dp"
    android:text="@string/pause_paly" / 
  <Button
    android:id="@+id/stop_paly"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/pause_paly"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="40dp"
    android:text="@string/stop_paly" / 
</RelativeLayout 

在MainActivity中进行录音,代码如下:

package com.example.kk.soundrecording;
import java.io.File;
import java.io.IOException;
import com.example.kk.util.RecordPlayer;
import android.app.Activity;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
/**
*
* @author kk
*
*/
public class MainActivity extends Activity implements OnClickListener {
// 开始录音
private Button start;
// 停止按钮
private Button stop;
// 播放按钮
private Button paly;
// 暂停播放
private Button pause_paly;
// 停止播放
private Button stop_paly;
// 录音类
private MediaRecorder mediaRecorder;
// 以文件的形式保存
private File recordFile;
private RecordPlayer player;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recordFile = new File("/mnt/sdcard", "kk.amr");
initView();
Listener();
}
private void initView() {
start = (Button) findViewById(R.id.start);
stop = (Button) findViewById(R.id.stop);
paly = (Button) findViewById(R.id.paly);
pause_paly = (Button) findViewById(R.id.pause_paly);
stop_paly = (Button) findViewById(R.id.stop_paly);
}
private void Listener() {
start.setOnClickListener(this);
stop.setOnClickListener(this);
paly.setOnClickListener(this);
pause_paly.setOnClickListener(this);
stop_paly.setOnClickListener(this);
}
@Override
public void onClick(View v) {
player = new RecordPlayer(MainActivity.this);
int Id = v.getId();
switch (Id) {
case R.id.start:
startRecording();
break;
case R.id.stop:
stopRecording();
break;
case R.id.paly:
playRecording();
break;
case R.id.pause_paly:
pauseplayer();
break;
case R.id.stop_paly:
stopplayer();
break;
}
}
private void startRecording() {
mediaRecorder = new MediaRecorder();
// 判断,若当前文件已存在,则删除
if (recordFile.exists()) {
recordFile.delete();
}
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
mediaRecorder.setOutputFile(recordFile.getAbsolutePath());
try {
// 准备好开始录音
mediaRecorder.prepare();
mediaRecorder.start();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void stopRecording() {
if (recordFile != null) {
mediaRecorder.stop();
mediaRecorder.release();
}
}
private void playRecording() {
player.playRecordFile(recordFile);
}
private void pauseplayer() {
player.pausePalyer();
}
private void stopplayer() {
// TODO Auto-generated method stub
player.stopPalyer();
}
}

同时,新建一个RecordPlayer类,用来播放保存好的录音,如下:

package com.example.kk.util;
import java.io.File;
import android.content.Context;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.net.Uri;
import android.util.Log;
import android.widget.Toast;
import com.example.kk.soundrecording.R;
/**
*
*
* @author kk  录音播放类
*
*/
public class RecordPlayer {
private static MediaPlayer mediaPlayer;
private Context mcontext;
public RecordPlayer(Context context) {
this.mcontext = context;
}
// 播放录音文件
public void playRecordFile(File file) {
if (file.exists() && file != null) {
if (mediaPlayer == null) {
Uri uri = Uri.fromFile(file);
mediaPlayer = MediaPlayer.create(mcontext, uri);
}
mediaPlayer.start();
//监听MediaPlayer播放完成
mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer paramMediaPlayer) {
// TODO Auto-generated method stub
//弹窗提示
Toast.makeText(mcontext,
mcontext.getResources().getString(R.string.ok),
Toast.LENGTH_SHORT).show();
}
});
}
}
// 暂停播放录音
public void pausePalyer() {
if (mediaPlayer.isPlaying()) {
mediaPlayer.pause();
Log.e("TAG", "暂停播放");
}
}
// 停止播放录音
public void stopPalyer() {
// 这里不调用stop(),调用seekto(0),把播放进度还原到最开始
if (mediaPlayer.isPlaying()) {
mediaPlayer.pause();
mediaPlayer.seekTo(0);
Log.e("TAG", "停止播放");
}
}
}

此时,功能代码都已实现,但是运行时会报错!为什么呢,这个是被很多初学者会忘记的,那就是android开发中调用相应的功能时,必须在主配置文件中授予相应的权限,在配置文件中添加如下代码:

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

另外,Android权限控制的详细说明可以参考Android Manifest功能与权限描述大全

附:Demo源码点击此处本站下载

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android视图View技巧总结》、《Android编程之activity操作技巧总结》、《Android操作json格式数据技巧总结》、《Android资源操作技巧汇总》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android常用控件ImageSwitcher使用方法详解

    图像切换器使用ImageSwitcher表示,用于实现类似于Windows操作系统下的“Windows照片查看器”中的上一张、下一张切换图片的功能。在使用Ima...

    砸漏
  • android实现快递跟踪进度条

    本文实例为大家分享了android快递跟踪进度条展示的具体代码,供大家参考,具体内容如下

    砸漏
  • Android中fragment+viewpager实现布局

    本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下

    砸漏
  • RecyclerVIew实现悬浮吸顶效果

    砸漏
  • [android] 开启新的activity获取他的返回值

    应用场景:打开一个新的activity,在这个activity上获取数据,返回给打开它的界面

    陶士涵
  • Android高级组件ImageSwitcher图像切换器使用方法详解

    图像切换器(ImageSwitcher),用于实现类似于Windows操作系统的“Windows照片查看器”中的上一张、下一张切换图片的功能。在使用ImageS...

    砸漏
  • Android实现搜索本地音乐的方法

    本文实例为大家分享了Android实现搜索本地音乐展示的具体代码,供大家参考,具体内容如下

    砸漏
  • android实现快递跟踪进度条

    本文实例为大家分享了android快递跟踪进度条展示的具体代码,供大家参考,具体内容如下

    砸漏
  • Android中fragment+viewpager实现布局

    本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下

    砸漏
  • android的RadioGroup讲解

    这个主要是如何替换fragment的demo。效果图如下(下面的tabhost和上面的bar不属于这次的内容,这个是我做的一个应用程序框架的一部分,有需要的或者...

    xiangzhihong

扫码关注云+社区

领取腾讯云代金券