您的位置:首页 > 移动开发 > Android开发

Android录音播放、停止

2016-05-20 20:53 393 查看
先布局一个button点击录音

然后一个listview显示录音

package jz.com.myapplication;

import android.app.DownloadManager;

import android.content.Context;

import android.content.Intent;

import android.content.pm.ActivityInfo;

import android.graphics.PixelFormat;

import android.media.MediaPlayer;

import android.media.MediaRecorder;

import android.os.Bundle;

import android.os.SystemClock;

import android.support.v7.app.AppCompatActivity;

import android.util.Log;

import android.view.LayoutInflater;

import android.view.MotionEvent;

import android.view.View;

import android.view.ViewGroup;

import android.view.Window;

import android.view.WindowManager;

import android.widget.AdapterView;

import android.widget.BaseAdapter;

import android.widget.Button;

import android.widget.ListView;

import android.widget.TextView;

import android.widget.Toast;

import java.io.File;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

import java.util.UUID;

/**

 * 实现按住说话功能

 * 按住说话,开始录音,停止录音,显示到列表,点击列表项播放。

 */

public class MainActivity extends AppCompatActivity {

    /**

     * log标记

     */

    private static final String LOG_TAG = "MainActivity";

    /**

     * 语音文件保存路径

     */

    private String mFileName = null;

    /**

     * 按住说话按钮

     */

    private Button mBtnVoice;

    /**

     * 用于语音播放

     */

    private MediaPlayer mPlayer = null;

    /**

     * 用于完成录音

     */

    private MediaRecorder mRecorder = null;

    /**

     * 显示语音列表

     */

    private ListView mVoidListView;

    /**

     * 语音列表适配器

     */

    private MyListAdapter mAdapter;

    /**

     * 语音列表

     */

    private List<String> mVoicesList;

    /**

     * 录音存储路径

     */

    private static final String PATH = "/sdcard/MyVoiceForder/Record/";

    long time;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        initData();

        initView();

    }

    /**

     * 初始化控件

     */

    private void initView() {

        mVoidListView = (ListView) findViewById(R.id.voidList);

        mAdapter = new MyListAdapter(this);

        mVoidListView.setAdapter(mAdapter);

        mVoidListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override

            public void onItemClick(AdapterView<?> arg0, View view,

                                    int position, long arg3) {

                try {

                    mPlayer.reset();    //装在下一首音频

                    mPlayer.setDataSource(mVoicesList.get(position));   //准备声音

                    mPlayer.prepare();  //准备音频

                    mPlayer.start();    //开始播放

                    Log.e(LOG_TAG, "播放成功");

                } catch (IOException e) {

                    Log.e(LOG_TAG, "播放失败");

                }

            }

        });

        mBtnVoice = (Button) findViewById(R.id.btn_voice);

        mBtnVoice.setText("按住说话");

        mBtnVoice.setOnTouchListener(new View.OnTouchListener() {

            @Override

            public boolean onTouch(View v, MotionEvent event) {

                switch (event.getAction()) {

                    case MotionEvent.ACTION_DOWN:

                        Log.i(LOG_TAG, "开始录音");

                        if (time == 0) {

                            time = System.currentTimeMillis();

                        }

                        startVoice();

                        break;

                    case MotionEvent.ACTION_UP:

                        Log.i(LOG_TAG, "停止录音");

                        stopVoice();

                        break;

                    default:

                        break;

                }

                return false;

            }

        });

    }

    /**

     * 初始化数据

     */

    private void initData() {

        mVoicesList = new ArrayList<String>();

        mPlayer = new MediaPlayer();

    }

    /**

     * 开始录音

     */

    private void startVoice() {

        // 设置录音保存路径

        mFileName = PATH + UUID.randomUUID().toString() + ".amr";

        Log.i("录音保存的路径", mFileName.toString());

        String state = android.os.Environment.getExternalStorageState();   //判断sd卡存在

        if (!state.equals(android.os.Environment.MEDIA_MOUNTED)) {

            Log.i(LOG_TAG, "SD Card is not mounted,It is  " + state + ".");

        }

        File directory = new File(mFileName).getParentFile();

        if (!directory.exists() && !directory.mkdirs()) {

            Log.i(LOG_TAG, "Path to file could not be created");

        }

        Toast.makeText(getApplicationContext(), "开始录音", Toast.LENGTH_LONG).show();

        mRecorder = new MediaRecorder();

        mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);

        mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);

        mRecorder.setOutputFile(mFileName);

        mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);

        try {

            mRecorder.prepare();

        } catch (IOException e) {

            Log.e(LOG_TAG, "prepare() failed");

        }

        mRecorder.start();

    }

    /**

     * 停止录音

     */

    private void stopVoice() {

        if (mRecorder != null) {

            mRecorder.stop();       //停止录制

            mRecorder.release();    //释放资源

            mRecorder = null;

            mVoicesList.add(mFileName);

            mAdapter = new MyListAdapter(MainActivity.this);

            mVoidListView.setAdapter(mAdapter);

            Toast.makeText(getApplicationContext(), "保存录音" + mFileName, Toast.LENGTH_SHORT).show();

        } else {

            Toast.makeText(MainActivity.this, "录音时间过短", Toast.LENGTH_SHORT).show();

        }

    }

    /**

     * 语音列表适配器

     */

    private class MyListAdapter extends BaseAdapter {

        LayoutInflater mInflater;

        public MyListAdapter(Context context) {

            mInflater = LayoutInflater.from(context);

        }

        @Override

        public int getCount() {

            return mVoicesList.size();

        }

        @Override

        public Object getItem(int position) {

            return position;

        }

        @Override

        public long getItemId(int position) {

            return position;

        }

        @Override

        public View getView(int position, View convertView, ViewGroup parent) {

            Log.i("适配器的getView", "getView");

            convertView = mInflater.inflate(R.layout.item_voicelist, null);

            TextView tv = (TextView) convertView.findViewById(R.id.tv_armName);

            tv.setText(mVoicesList.get(position));

            return convertView;

        }

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: