以下是代码,  public void onCallStateChanged(int state, String incomingNumber) {
        switch (state){
            case CALL_STATE_IDLE://空闲状态
                //结束录音
                if (mediaRecorder != null) {
                    mediaRecorder.stop();
                    mediaRecorder.reset();   // You can reuse the object by going back to setAudioSource() step
                    mediaRecorder.release(); // Now the object cannot be reused
                    System.out.println("----成功关闭---");
                }
                break;
            case CALL_STATE_RINGING://来电状态
                System.out.println("----来来来来来来---");
                //准备一个录音机
                mediaRecorder = new MediaRecorder();
                mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
                mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
                mediaRecorder.setOutputFile("/mnt/sdcard/luyin.3gp");
                try {
                    mediaRecorder.prepare();
                    System.out.println("----准备好了---");
                } catch (IOException e) {
                    e.printStackTrace();
                }
                break;
            case CALL_STATE_OFFHOOK://接听状态
            // 开始录制
             mediaRecorder.start();   // Recording is now started
                break;        }报错如下:
11-28 07:59:05.447 8343-8343/? E/AndroidRuntime: FATAL EXCEPTION: main
                                                 Process: com.example.sunmingmei.listener, PID: 8343
                                                 java.lang.RuntimeException: setAudioSource failed.
                                                     at android.media.MediaRecorder.setAudioSource(Native Method)
                                                     at com.example.sunmingmei.listener.phonyListener.onCallStateChanged(phonyListener.java:36)
                                                     at android.telephony.PhoneStateListener$1.handleMessage(PhoneStateListener.java:298)
                                                     at android.os.Handler.dispatchMessage(Handler.java:102)
                                                     at android.os.Looper.loop(Looper.java:154)
                                                     at android.app.ActivityThread.main(ActivityThread.java:6077)
                                                     at java.lang.reflect.Method.invoke(Native Method)
                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)不是权限问题,加入的权限如下:
 <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
   <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
   <uses-permission android:name="android.permission.RECORD_AUDIO"/>
请大神不吝赐教,感谢感谢。

解决方案 »

  1.   

    (phonyListener.java:36这一行做了什么
      

  2.   

    从log看,设置声音源有问题,你直接设置成 默认不就好了, mediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
      

  3.   

    正常来讲,应该是你manifest少配置了权限,试下在配置清单里面添加这个<uses-permission android:name="android.permission.RECORD_AUDIO"/>,或者是你打下log,看下资源是不是丢失了
      

  4.   

    别的参数有试过吗,从log来看是setAudiosource的问题,建议试试 MediaRecorder.AudioSource.VOICE_COMMUNICATION和MediaRecorder.AudioSource.VOICE_CALL