使用MediaRecorder 录音,在小米手机上启动关闭时报错,求大神解惑

weixin_36617528 2017-09-25 04:07:55
代码:
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)
...全文
343 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_36617528 2017-09-25
  • 打赏
  • 举报
回复
报错: java.lang.RuntimeException: Unable to start service io.rong.callkit.recorde.RecordService@6c828da with Intent { cmp=com.app.jianguyu.jiangxidangjian/io.rong.callkit.recorde.RecordService (has extras) }: java.lang.IllegalStateException at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3388) at android.app.ActivityThread.-wrap21(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1617) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6239) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:895) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:785) Caused by: java.lang.IllegalStateException at android.media.MediaRecorder.start(Native Method) at io.rong.callkit.recorde.RecordService.startRecorde(RecordService.java:97) at io.rong.callkit.recorde.RecordService.onStart(RecordService.java:42) at android.app.Service.onStartCommand(Service.java:509) at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3371) at android.app.ActivityThread.-wrap21(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1617)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:154)  at android.app.ActivityThread.main(ActivityThread.java:6239)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:895)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:785) 
weixin_36617528 2017-09-25
  • 打赏
  • 举报
回复
引用 1 楼 f839903061 的回复:
报错提示你线程处理的参数有问题
MediaRecorder 的设置参数有问题吗?
weixin_36617528 2017-09-25
  • 打赏
  • 举报
回复
MediaRecorder 的设置参数有问题吗?
雨焰 2017-09-25
  • 打赏
  • 举报
回复
报错提示你线程处理的参数有问题

80,348

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧