/* * The application needs to have the permission to write to external storage * if the output file is written to the external storage, and also the * permission to record audio. These permissions must be set in the * application's AndroidManifest.xml file, with something like: * * <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> * <uses-permission android:name="android.permission.RECORD_AUDIO" /> * */package com.android.audiorecordtest;import android.app.Activity;import android.widget.LinearLayout;import android.os.Bundle;import android.os.Environment;import android.view.ViewGroup;import android.widget.Button;import android.view.View;import android.view.View.OnClickListener;import android.content.Context;import android.util.Log;import android.media.MediaRecorder;import android.media.MediaPlayer;import java.io.IOException;public class AudioRecordTest extends Activity{    private static final String LOG_TAG = "AudioRecordTest";    private static String mFileName = null;    private RecordButton mRecordButton = null;    private MediaRecorder mRecorder = null;    private PlayButton   mPlayButton = null;    private MediaPlayer   mPlayer = null;    private void onRecord(boolean start) {        if (start) {            startRecording();        } else {            stopRecording();        }    }    private void onPlay(boolean start) {        if (start) {            startPlaying();        } else {            stopPlaying();        }    }    private void startPlaying() {        mPlayer = new MediaPlayer();        try {            mPlayer.setDataSource(mFileName);            mPlayer.prepare();            mPlayer.start();        } catch (IOException e) {            Log.e(LOG_TAG, "prepare() failed");        }    }    private void stopPlaying() {        mPlayer.release();        mPlayer = null;    }    private void startRecording() {        mRecorder = new MediaRecorder();        mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);        mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);        mRecorder.setOutputFile(mFileName);        mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);        try {            mRecorder.prepare();        } catch (IOException e) {            Log.e(LOG_TAG, "prepare() failed");        }        mRecorder.start();    }    private void stopRecording() {        mRecorder.stop();        mRecorder.release();        mRecorder = null;    }    class RecordButton extends Button {        boolean mStartRecording = true;        OnClickListener clicker = new OnClickListener() {            public void onClick(View v) {                onRecord(mStartRecording);                if (mStartRecording) {                    setText("Stop recording");                } else {                    setText("Start recording");                }                mStartRecording = !mStartRecording;            }        };        public RecordButton(Context ctx) {            super(ctx);            setText("Start recording");            setOnClickListener(clicker);        }    }    class PlayButton extends Button {        boolean mStartPlaying = true;        OnClickListener clicker = new OnClickListener() {            public void onClick(View v) {                onPlay(mStartPlaying);                if (mStartPlaying) {                    setText("Stop playing");                } else {                    setText("Start playing");                }                mStartPlaying = !mStartPlaying;            }        };        public PlayButton(Context ctx) {            super(ctx);            setText("Start playing");            setOnClickListener(clicker);        }    }    public AudioRecordTest() {        mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();        mFileName += "/audiorecordtest.3gp";    }    @Override    public void onCreate(Bundle icicle) {        super.onCreate(icicle);        LinearLayout ll = new LinearLayout(this);        mRecordButton = new RecordButton(this);        ll.addView(mRecordButton,            new LinearLayout.LayoutParams(                ViewGroup.LayoutParams.WRAP_CONTENT,                ViewGroup.LayoutParams.WRAP_CONTENT,                0));        mPlayButton = new PlayButton(this);        ll.addView(mPlayButton,            new LinearLayout.LayoutParams(                ViewGroup.LayoutParams.WRAP_CONTENT,                ViewGroup.LayoutParams.WRAP_CONTENT,                0));        setContentView(ll);    }    @Override    public void onPause() {        super.onPause();        if (mRecorder != null) {            mRecorder.release();            mRecorder = null;        }        if (mPlayer != null) {            mPlayer.release();            mPlayer = null;        }    }}

更多相关文章

  1. 代码中设置drawableleft
  2. android 3.0 隐藏 系统标题栏
  3. Android开发中activity切换动画的实现
  4. Android(安卓)学习 笔记_05. 文件下载
  5. Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
  6. 技术博客汇总
  7. android 2.3 wifi (一)
  8. AndRoid Notification的清空和修改
  9. Android中的Chronometer

随机推荐

  1. 【Android(安卓)Basic Training - 02】基
  2. Android - 获取控件(包括状态栏与标题栏)宽
  3. http://www.jianshu.com/p/7e46fe7485bb
  4. Android 关于build.gradle的一些配置问题
  5. Android中隐藏标题栏和状态栏
  6. flutter 混合开发
  7. protected-broadcast 规范使用(ERROR: Se
  8. Android 手机获取时区
  9. Android EventBus二三事
  10. Android编译打包-gradle task 的依赖