使用MediaRecorder 录音,在小米手机上启动关闭时报错,求大神解惑
代码:
public class RecordService extends Service {
MediaRecorder mediaRecorder;
File audioFile = null;
private String recordName;
private MediaRecorder m=null;
private MediaRecorder getInstance(){
if (m==null) {
m=new MediaRecorder();
}
return m;
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
public void onCreate() {
}
// 当客户端调用startService()方法启动Service时,该方法被调用
public void onStart(Intent intent, int startId) {
recordName = intent.getStringExtra("file_name").trim();
// try {
startRecorde();
//}catch(Exception e) {
// }
}
// 当Service不再使用时调用
public void onDestroy() {
// try {
stopRecorde();
//}catch (Exception e){
// }
}
// 当解除绑定时调用
public boolean onUnbind(Intent intent) {
return super.onUnbind(intent);
}
public void startRecorde(){
if (!EnvironmentShare.haveSdCard()) {
//Toast.makeText(this, "SD不存在,不正常录音!!", Toast.LENGTH_LONG).show();
}else {
if (mediaRecorder==null){
mediaRecorder=getInstance();
}
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
// 设置音频输出格式(默认的输出格式)
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
// 设置音频编码方式(默认的编码方式)
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
// 创建一个临时的音频输出文件.record_是文件的前缀名 .amr是后缀名
try {
audioFile=new File(EnvironmentShare.getAudioRecordDir(),recordName+".amr");
} catch (Exception e) {
e.printStackTrace();
}
// 设置录制器的文件保留路径
if (!audioFile.exists()){
audioFile=new File(EnvironmentShare.getAudioRecordDir(),recordName+".amr");
}
mediaRecorder.setOutputFile(audioFile.getAbsolutePath());
if(Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1 ){
mediaRecorder.setAudioSamplingRate(11025);
}
// 准备并且开始启动录制器
try {
mediaRecorder.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mediaRecorder.start();
}
}
public void stopRecorde() {
if (mediaRecorder != null) {
try {
mediaRecorder.stop();
} catch (IllegalStateException e) {
// TODO 如果当前java状态和jni里面的状态不一致,
mediaRecorder = null;
mediaRecorder = getInstance();
mediaRecorder.stop();
}
mediaRecorder.release();
mediaRecorder = null;
}
}
}
报错:
1 java.lang.RuntimeException:Unable to start service io.rong.callkit.recorde.RecordService@2279d8c with Intent { cmp=com.app.jianguyu.jiangxidangjian/io.rong.callkit.recorde.RecordService (has extras) }: java.lang.IllegalStateException
2 android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3388)
3 ......
4 java.lang.IllegalStateException:
5 android.media.MediaRecorder.start(Native Method)
6 io.rong.callkit.recorde.RecordService.startRecorde(RecordService.java:119)
7 io.rong.callkit.recorde.RecordService.onStart(RecordService.java:57)
8 android.app.Service.onStartCommand(Service.java:509)
9 android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3371)
10 android.app.ActivityThread.-wrap21(ActivityThread.java)
11 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1617)
12 android.os.Handler.dispatchMessage(Handler.java:102)
13 android.os.Looper.loop(Looper.java:154)
14 android.app.ActivityThread.main(ActivityThread.java:6239)
15 java.lang.reflect.Method.invoke(Native Method)
16 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:895)
17 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:785)