android 实现按住说话功能

今天工作上需要做一个仿微信语音聊天中的按住说话的功能。其实很简单,主要就是利用MediaRecorder实现录音,用MediaPlayer实现播放功能。下面我就具体说一下是怎么实现的。

1,首先对按钮的onTouch事件进行监听。

mBtnVoice.setText("按住说话");
        mBtnVoice.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    startVoice();
                    break;
                case MotionEvent.ACTION_UP:
                    stopVoice();
                    break;
                default:
                    break;
                }
                return false;
            }
        });
当按下的时候,开始进行录音,
/** 开始录音 */
	private void startVoice() {
		// 设置录音保存路径
		mFileName = PATH + UUID.randomUUID().toString() + ".amr";
		String state = android.os.Environment.getExternalStorageState();
		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(), "开始录音", 0).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();
	}

这个方法中主要有4个方法,
设置用于录制的音源。
setAudioSource( audio_source)
设置在录制过程中产生的输出文件的格式
setOutputFormat(output_format)
设置输出文件的路径
setOutputFile(String path)
设置audio的编码格式
void setAudioEncoder(int audio_encoder)
当手松开按钮时停止录音
/** 停止录音 */
	private void stopVoice() {
		mRecorder.stop();
		mRecorder.release();
		mRecorder = null;
		mVoicesList.add(mFileName);
		mAdapter = new MyListAdapter(RecordActivity.this);
		mVoidListView.setAdapter(mAdapter);
		Toast.makeText(getApplicationContext(), "保存录音" + mFileName, 0).show();
	}

android 实现按住说话功能_第1张图片

2,上面已经完成音频的录制,下面就该说说播放了。

mPlayer = new MediaPlayer();
mVoidListView.setOnItemClickListener(new 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();
                } catch (IOException e) {
                    Log.e(LOG_TAG, "播放失败");
                }
            }
        });
我这里录完音频,直接将其显示到列表,点击列表项播放。

到此为止,一个简单的按住说话功能就实现了。在此基础上稍作修改就可以做出微信语音的效果了。

你可能感兴趣的:(android 实现按住说话功能)