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