Android PhoneStateListener在牛轧糖中工作不正常
这里我在onCreate方法中调用PhoneStateChangeListener类 代码是: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);
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);
}
面对前面提到的问题中的相同问题,我们没有得到呼叫状态空闲,那么我们如何去激活?