首先需要判断权限是否开启: 参考 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();
}
}