文件转base64 base64字符串转文件
**
* Created by zlinsun on 2018/9/17.
* hah
*/
public class FileBase64 {
/**
* encodeBase64File:(将文件转成base64 字符串).
* @param path 文件路径
* @return
* @throws Exception
*/
public static String encodeBase64File(String path) throws Exception {
File file = new File(path);
FileInputStream inputFile = new FileInputStream(file);
byte[] buffer = new byte[(int)file.length()];
inputFile.read(buffer);
inputFile.close();
return Base64.encodeToString(buffer,Base64.DEFAULT);
}
/**
* decoderBase64File:(将base64字符解码保存文件).
* @param base64Code 编码后的字串
* @param savePath 文件保存路径
* @throws Exception
*/
public static void decoderBase64File(String base64Code,String savePath) throws Exception {
byte[] buffer =Base64.decode(base64Code, Base64.DEFAULT);
FileOutputStream out = new FileOutputStream(savePath);
out.write(buffer);
out.close();
}
}
语音留言:
/**
* Created by zlinsun on 2018/9/18.
* hah
*/
public class AmrRecorder {
private MediaRecorder mRecorder = null;
private String mFileName = "";
Context mContext;
public AmrRecorder(Context context) {
mContext = context;
File file = mContext.getCacheDir();
File tempFile = null;
try {
// 创建临时文件,注意这里的格式为.pcm .amr .mp3
tempFile = File.createTempFile("recording", ".amr", file);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.mFileName = tempFile.getAbsolutePath();
}
/**
* 开始录音
*/
public void startRecord() {
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//RAW_AMR虽然被高版本废弃,但它兼容低版本还是可以用的
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);
mRecorder.setOutputFile(mFileName);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try {
mRecorder.prepare();
} catch (IOException e) {
Log.e("tag", "prepare() failed");
}
try {
mRecorder.start();
} catch (IllegalStateException e) {
e.printStackTrace();
Log.e("mRecorder.start()::", e.toString());
}
}
public String stopRecord() {
/* if (null != mRecorder) {
//设置后不会崩
mRecorder.setOnErrorListener(null);
mRecorder.setPreviewDisplay(null);
mRecorder.stop();
mRecorder.release();
}
mRecorder = null;*/
if (mRecorder != null) {
mRecorder.setOnErrorListener(null);
mRecorder.setOnInfoListener(null);
mRecorder.setPreviewDisplay(null);
try {
mRecorder.stop();
} catch (IllegalStateException e) {
// TODO 如果当前java状态和jni里面的状态不一致,
//e.printStackTrace();
mRecorder = null;
mRecorder = new MediaRecorder();
}
mRecorder.release();
mRecorder = null;
}
String str = "";
try {
str = FileBase64.encodeBase64File(mFileName);
} catch (Exception e) {
e.printStackTrace();
}
return str;
}
}
语音播放
/**
* Created by zlinsun on 2018/9/18.
* hah
*/
public class AmrPlayer {
private MediaPlayer mPlayer = null;
private String mFileName = "";
Context mContext;
public AmrPlayer(Context context) {
mContext = context;
File file = mContext.getCacheDir();
File tempFile = null;
try {
// 创建临时文件,注意这里的格式为.pcm .amr .mp3
tempFile = File.createTempFile("recording", ".amr", file);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.mFileName = tempFile.getAbsolutePath();
}
public static String name = "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";
public void startPlay(String str) {
try {
FileBase64.decoderBase64File(str, mFileName);
} catch (Exception e) {
e.printStackTrace();
}
mPlayer = new MediaPlayer();
try {
mPlayer.setDataSource(mFileName);
mPlayer.prepare();
mPlayer.start();
} catch (IOException e) {
Log.e("tag", "prepare() failed");
}
}
public void stopPlay() {
if (null != mPlayer) {
mPlayer.release();
}
mPlayer = null;
}
}
权限:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.RECORD_AUDIO}, 1);
isPermissionsRecord = false;
}
/**
* ⑨重写onRequestPermissionsResult方法
* 获取动态权限请求的结果,再开启录制音频
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
isPermissionsRecord = true;
SnackbarUtils.make(this, "权限申请成功,请重新发送");
} else {
isPermissionsRecord = false;
SnackbarUtils.make(this, "拒绝该权限将无法留言");
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}