• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Android 录音功能开发

武飞扬头像
meixi_android
帮助1

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;
    }
};
学新通

 demo连接:https://download.csdn.net/download/meixi_android/86737564

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgbkkek
系列文章
更多 icon
同类精品
更多 icon
继续加载