1、申请权限
<uses-permission android:name=""/> <uses-permission android:name=".RECORD_AUDIO"/>
<uses-permission android:name=".WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name=".READ_EXTERNAL_STORAGE" />
2、开始录音
//开始计时录音 @SuppressLint("MissingPermission") // @SuppressLint("ClickableViewAccessibility") private void startRecording() { recorder = new AudioRecord(, RECORDER_SAMPLERATE, RECORDER_CHANNELS_SINGLE, RECORDER_AUDIO_ENCODING, bufferSize); (); isRecording = true; recordingThread = new Thread(new Runnable() { @Override public void run() { writeAudioDataToFile(); } }, "AudioRecorder Thread"); (); }
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
private void writeAudioDataToFile() { byte data[] = new byte[bufferSize]; String filename = getTempFilename(); strFileName = getTime(); ("开始录音地址===== "+filename); FileOutputStream os = null; try { os = new FileOutputStream(filename); } catch (FileNotFoundException e) { (); } int read = 0; if (null != os) { while (isRecording) { read = (data, 0, bufferSize); if (AudioRecord.ERROR_INVALID_OPERATION != read) { try { (data); } catch (IOException e) { (); } } } try { (); } catch (IOException e) { (); } } }
3、结束录音
private void stopRecording() { if (null != recorder) { isRecording = false; (); (); isSend = true; recorder = null; recordingThread = null; } copyWaveFile(getTempFilename(), getFilename()); deleteTempFile(); }
4、长按录音,放起结束录音
onTouchListener = new () { @Override public boolean onTouch(View v, MotionEvent event) { int iAction = (); if (iAction == MotionEvent.ACTION_UP) {//抬起结束录音 ("抬起结束录音"); if(isRecording){ isRecording = false; stopRecording(); strFilePath = getFilename();//最终语言路径 (); (1, (getFilename(), 1)); } }else if (iAction == MotionEvent.ACTION_DOWN){//按住开始录音 ("按住开始录音"); if(!isRecording){ isRecording = true; startRecording(); } return true; } return false; } };