Android 调用系统录音

首先需要判断权限是否开启:
参考 https://blog.csdn.net/qq_27400335/article/details/79412774
更详细博客:https://blog.csdn.net/qq_27400335/article/details/83819068

private String fileName;
private String mVoicePath;
/**
 * 启动录音机,创建文件
 */
public void startRecord(RecordingCallBack callBack) {

    UUID uuid = UUID.randomUUID();
    fileName = uuid + ".amr";

    //将拍摄的照片保存在一个指定好的文件下
    File dir= new File(Environment.getExternalStorageDirectory() + "/测试");
    if(!dir.exists()){
        dir.mkdirs();
    }

    File f = new File(dir, fileName);

    mVoicePath = f.getAbsolutePath();

    f.setWritable(true);

    Intent intentRecord = new Intent();

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        //添加这一句表示对目标应用临时授权该Uri所代表的文件
        intentRecord.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    }

    intentRecord.setAction(MediaStore.Audio.Media.RECORD_SOUND_ACTION);

    startActivityForResult(intentRecord, 1001);
}
/**
 * 保存音频到SD卡的指定位置
 *
 * @param path 录音文件的路径
 */
public boolean saveVoiceToSD(String path) {
    boolean b = false;
    //创建输入输出
    InputStream isFrom = null;
    OutputStream osTo = null;
    try {
        //设置输入输出流
        isFrom = new FileInputStream(path);
        osTo = new FileOutputStream(mVoicePath);
        byte bt[] = new byte[1024];
        int len;
        while ((len = isFrom.read(bt)) != -1) {
            osTo.write(bt, 0, len);
        }
        Log.d("TAG_Path", "保存录音完成。");
        b=true;
    } catch (IOException e) {
        e.printStackTrace();
        b=false;
        Log.d("TAG_Path", "e:"+e.toString());
    } finally {
        if (osTo != null) {
            try {
                //不管是否出现异常,都要关闭流
                osTo.close();
                Log.d("TAG_Path", "关闭输出流");
            } catch (IOException e) {
                e.printStackTrace();
                b=false;
            }
        }
        if (isFrom != null) {
            try {
                isFrom.close();
                Log.d("TAG_Path", "关闭输入流");
            } catch (IOException e) {
                e.printStackTrace();
                b=false;
            }
        }
    }

    return b;
}

 

//回调

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == -1 && requestCode == 1001) {
        Uri uri = data.getData();
        String path = Environment.getExternalStorageDirectory() + "/测试/" + fileName;
        if (uri != null) {
            String temp = CameraUtils.getAudioFilePathFromUri(uri, getActivity());
            boolean b = CameraUtils.saveVoiceToSD(temp);
            File file = new File(path);
            if (b && file.exists()) {
               //path 音频路劲
               ...下一步操作
            }
        }
    } else if (resultCode == 1001) {
        Baby.BabyBean baby = (Baby.BabyBean) data.getSerializableExtra("baby");
        babyId = baby.getId() + "";
        setBabyData();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值