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

"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" >    

在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开发中调用相应的功能时,必须在主配置文件中授予相应的权限,在配置文件中添加如下代码:

   "android.permission.RECORD_AUDIO" />   "android.permission.WRITE_EXTERNAL_STORAGE" />   "android.permission.WAKE_LOCK" />   

好了,现在就可以使用了,觉得有用的朋友请点个赞。

demo下载地址:http://download.csdn.net/detail/myname_kk/9280417

更多相关文章

  1. Android(安卓)Telephony —— 手机信号实时变化源码分析过程记录
  2. Delphi xe7 FireMonkey / Mobile (Android, iOS)生成 QR Code完
  3. Android电源管理简介(下)
  4. Android(安卓)Service 服务(一)—— Service
  5. Android对话框
  6. android多媒体播放源码解析
  7. Android完全退出应用程序
  8. Android下用Media Player实现一个最简单的视频播放器
  9. [干货] Android(安卓)深入浅出 Activity 生命周期(二)

随机推荐

  1. android 开源项目汇总
  2. Android获取系统时间
  3. android 学习资料
  4. android播放音乐
  5. android实现xml数据的解析
  6. Android CalendarView 使用
  7. Android DOM解析XML
  8. Android自定义弹窗进度条
  9. ch029 Android service aidl
  10. Accessing internal data on Android dev