Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.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 PhoneStateListener在牛轧糖中工作不正常_Android_Audio Recording_Video Recording_Phone State Listener - Fatal编程技术网

Android PhoneStateListener在牛轧糖中工作不正常

Android PhoneStateListener在牛轧糖中工作不正常,android,audio-recording,video-recording,phone-state-listener,Android,Audio Recording,Video Recording,Phone State Listener,这里我在onCreate方法中调用PhoneStateChangeListener类 代码是: PhoneStateChangeListener pscl = new PhoneStateChangeListener(MainActivity.this,true); TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

这里我在onCreate方法中调用PhoneStateChangeListener类

代码是:

PhoneStateChangeListener pscl = new PhoneStateChangeListener(MainActivity.this,true);
                            TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
                            tm.listen(pscl, PhoneStateListener.LISTEN_CALL_STATE);
PhoneStateChangeListener类是:

class PhoneStateChangeListener extends PhoneStateListener {


Context context;
Boolean doRecording=false;

public PhoneStateChangeListener(Context context,Boolean doRecording) {
    this.context = context;
    this.doRecording=doRecording;
}
public void onCallStateChanged(int state, String incomingNumber) {
    Log.d("CallRecorder", "PhoneListener::onCallStateChanged state:" + state + " incomingNumber:" + incomingNumber);
    //Intent callIntent = new Intent(context, RecordService.class);
    switch (state) {
        case TelephonyManager.CALL_STATE_IDLE:
            Log.d("CallRecorder", "CALL_STATE_IDLE, stoping recording");
            Boolean stopped = context.stopService(new Intent(context, RecordService.class));
            Log.e("CallRecorder", "CALL_STATE_IDLE starting recording---------------------------------"+isMyServiceRunning((getClass())));
            Log.i("CallRecorder", "stopService for RecordService returned " + stopped);
            break;
        case TelephonyManager.CALL_STATE_RINGING:
            Log.d("CallRecorder", "CALL_STATE_RINGING");
            doRecording=false;
            break;
        case TelephonyManager.CALL_STATE_OFFHOOK:
            if(doRecording) {

                Log.d("CallRecorder", "CALL_STATE_OFFHOOK starting recording");
                Log.e("CallRecorder", "CALL_STATE_OFFHOOK starting recording---------------------------------" + isMyServiceRunning((getClass())));
                Intent callIntent = new Intent(context, RecordService.class);
                ComponentName name = context.startService(callIntent);
                if (null == name) {
                    Log.e("CallRecorder", "startService for RecordService returned null ComponentName");
                } else {
                    Log.i("CallRecorder", "startService returned " + name.flattenToString());
                }

            }
            break;
    }
}
}

phonestatechangelistener在牛轧糖以下运行良好,问题是当通话开始时,它会调用call_STATE_OFFHOOK并启动服务,但当通话结束时,它不会调用call_STATE_IDLE,因此服务不会停止这个问题就在棉花糖上面。

只要在通话结束时停用您的
PhoneStateListener

private void deactivatePhoneStateListener(){
    if(mPhoneStateListener != null){
        mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
    }
    mPhoneStateListener = null;
}
需要时再次激活它:

private void activatePhoneStateListener(Context context){
    mPhoneStateListener = new MyPhoneStateListener();
    mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
}

面对前面提到的问题中的相同问题,我们没有得到呼叫状态空闲,那么我们如何去激活?