代码:
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)

解决方案 »

  1.   

    MediaRecorder 的设置参数有问题吗?
      

  2.   

    MediaRecorder 的设置参数有问题吗?
      

  3.   

    报错:
    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)