PhoneStateListener在Nougat中无法正常工作

问题描述:

这里我在onCreate方法中调用PhoneStateChangeListener类。PhoneStateListener在Nougat中无法正常工作

代码:

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); 
}