Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我正在试着录电话。我可以录下电话,但我不知道在哪里停止录音机。下面是我的代码_Android_Audio Recording_Telephonymanager_Phone Call - Fatal编程技术网

Android 我正在试着录电话。我可以录下电话,但我不知道在哪里停止录音机。下面是我的代码

Android 我正在试着录电话。我可以录下电话,但我不知道在哪里停止录音机。下面是我的代码,android,audio-recording,telephonymanager,phone-call,Android,Audio Recording,Telephonymanager,Phone Call,这是我的CallBroadcastReceiver,我正在尝试录制通话。它可以正常工作,无需记录器。停止方法。当我添加stop方法时,它会使应用程序崩溃 给我建议,我应该在哪里调用StopRecording方法。这样我就可以恢复记录并将文件保存在SD卡中 我试图将stopRecording放入TelephonyManager.CALL_STATE_IDLE开关中,但它只是使录制崩溃。不记录任何内容或不创建文件 public class CallBroadcastReceiver extends

这是我的CallBroadcastReceiver,我正在尝试录制通话。它可以正常工作,无需记录器。停止方法。当我添加stop方法时,它会使应用程序崩溃

给我建议,我应该在哪里调用StopRecording方法。这样我就可以恢复记录并将文件保存在SD卡中

我试图将stopRecording放入TelephonyManager.CALL_STATE_IDLE开关中,但它只是使录制崩溃。不记录任何内容或不创建文件

public class CallBroadcastReceiver extends BroadcastReceiver 
{
String path = "/sdcard/AudioRecording";
private final int audioformat = 3;
public class MyPhoneStateListener extends PhoneStateListener implements  
SensorEventListener 
{
     Context context;
    AudioManager audioManager;
    MediaRecorder recorder;
    private SensorManager mSensorManager;
    private Sensor myLightSensor;
    private boolean CallState;
    private float sensorState;
    public MyPhoneStateListener(Context arg0) 
    {
        // TODO Auto-generated constructor stub
        this.context = arg0;
        mSensorManager = (SensorManager)
this.context.getSystemService(Context.SENSOR_SERVICE);
        myLightSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
        audioManager = (AudioManager)
this.context.getSystemService(Context.AUDIO_SERVICE);
        if (myLightSensor == null)
        {
            Log.i("On Receive", "Not Support");
        }
        else
        {
mSensorManager.registerListener(this,myLightSensor,
SensorManager.SENSOR_DELAY_NORMAL);
        }
    }

    @Override
    public void onCallStateChanged(int state, String incomingNumber) 
    {
        // TODO Auto-generated method stub
        switch (state) 
        {
        case TelephonyManager.CALL_STATE_IDLE:

            System.out.println("My Call IDLE");
            CallState = false;
            StartAudioSpeacker();
            //StopRecording();
            System.out.println("Is phone speaker : "+
audioManager.isSpeakerphoneOn());
            if (audioManager.isSpeakerphoneOn()) {
                audioManager.setSpeakerphoneOn(false);
                mSensorManager.unregisterListener(this);
            }
            break;

        case TelephonyManager.CALL_STATE_OFFHOOK :

            System.out.println("My Call OFFHOOK");
            CallState = true;
            StartAudioSpeacker();
            StartRecording();
            System.out.println("Is phone speaker : "+
audioManager.isSpeakerphoneOn());
            break;

        case TelephonyManager.CALL_STATE_RINGING :
             System.out.println("My Call RINGING");
             break;
        default:
            break;
        }
    }

    private void StartAudioSpeacker() 
    {
        // TODO Auto-generated method stub
        if (CallState && sensorState == 1.0) 
        {
            audioManager = (AudioManager)
this.context.getSystemService(Context.AUDIO_SERVICE);
            audioManager.setSpeakerphoneOn(true);
            audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
            audioManager.setStreamVolume(AudioManager.MODE_IN_CALL,  
audioManager.getStreamMaxVolume(AudioManager.MODE_IN_CALL), 1);
            System.out.println("Is phone speaker : "+ 
audioManager.isSpeakerphoneOn());
        }
        else
        {
            audioManager = (AudioManager)
this.context.getSystemService(Context.AUDIO_SERVICE);
            audioManager.setSpeakerphoneOn(false);
            audioManager.setStreamVolume(AudioManager.MODE_IN_CALL,
audioManager.getStreamMaxVolume(AudioManager.MODE_IN_CALL), 1);
            System.out.println("Speaker Volume :"+ 
audioManager.getStreamMaxVolume(AudioManager.MODE_IN_CALL));
            System.out.println("Is phone speaker : "+ 
audioManager.isSpeakerphoneOn());
        }

    }
    private void StartRecording() 
    {
        // TODO Auto-generated method stub

         recorder = new MediaRecorder();
         recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
         recorder.setOutputFormat(audioformat);
         recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
         recorder.setOutputFile(path+"test.amr");
         try {
            recorder.prepare();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        recorder.start();   // Recording is now started
        Log.i(this.getClass().getName(), "Start Recording");

    }

    private void StopRecording() 
    {
        // TODO Auto-generated method stub
        recorder.stop();
        recorder.reset();   
        recorder.release();
        Log.i(this.getClass().getName(), "Stop Recording");
    }
@Override
    public void onAccuracyChanged(Sensor arg0, int arg1)
    {
        // TODO Auto-generated method stub
        if (arg0.getType() == Sensor.TYPE_PROXIMITY) 
        {
            Log.i("Sensor Changed", "Accuracy :" + arg1);
        }

    }
    @Override
    public void onSensorChanged(SensorEvent arg0) 
    {
        // TODO Auto-generated method stub
        if (arg0.sensor.getType() == Sensor.TYPE_PROXIMITY) 
        {
            Log.i("Sensor Changed", "onSensor Change :" + arg0.values[0]);
            sensorState = arg0.values[0];
            StartAudioSpeacker();
        }
    }
}
public void onReceive(Context arg0, Intent arg1) 
{

      TelephonyManager tmanager = 
(TelephonyManager)arg0.getSystemService(Context.TELEPHONY_SERVICE);
      MyPhoneStateListener PhoneListener = new MyPhoneStateListener(arg0);
     tmanager.listen(PhoneListener, PhoneStateListener.LISTEN_CALL_STATE);
}       

}   

当您将CALL_STATE_IDLE作为新状态时,请停止录制。 这意味着呼叫已结束