2014-11-20 4 views
1

По окончании телефонного разговора я должен открыть другое мероприятие. Однако он не улавливает «сигнал завершения вызова».Завершение телефонного звонка на Android

Я использовал mTelManager в BroadcastReceiver и Service, но он не работает.

Когда активность открыта службой или BroadcastReceiver, она отображает MainActivity, а не целевую.

код Источник:

public class MainService extends Service{ 
TelephonyManager mTelManager; 
PhoneStateRead pListener; 
String TAG = "Call State catch"; 
boolean callOutState = false; //calling state 

@Override 
public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public void onCreate() { 
    Log.i(TAG, "ServiceReceiver->onReceive();"); 
    pListener = new PhoneStateRead(); 
    mTelManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
    mTelManager.listen(pListener, PhoneStateListener.LISTEN_CALL_STATE); 

    if(callOutState){ //if call end 
     Intent showRecord = new Intent(getBaseContext(), Call_Out_Record_Activity.class); 
     showRecord.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(showRecord);//open Call_Out_Record_Activity 
    } 
} 

public class PhoneStateRead extends PhoneStateListener { 
    private final String TAG = "Phone State Read"; 
    @Override 
    public void onCallStateChanged(int state, String incomingNumber) { 
     switch (state) { 
     case TelephonyManager.CALL_STATE_IDLE: 
      Log.i(TAG,"MyPhoneStateListener->onCallStateChanged() -> CALL_STATE_IDLE "+incomingNumber); 
      break; 

     case TelephonyManager.CALL_STATE_OFFHOOK: 
      Log.i(TAG,"MyPhoneStateListener->onCallStateChanged() -> CALL_STATE_OFFHOOK "+incomingNumber); 
      break; 

     case TelephonyManager.CALL_STATE_RINGING: 
      Log.i(TAG,"MyPhoneStateListener->onCallStateChanged() -> CALL_STATE_RINGING "+incomingNumber); 
      break; 

     default: 
      Log.i(TAG,"MyPhoneStateListener->onCallStateChanged() -> default -> "+Integer.toString(state)); 
      break; 
     } 
     CatchCallState(state); 
    } 
} 

private void CatchCallState(int state){ 
    if(state == TelephonyManager.CALL_STATE_OFFHOOK || state == TelephonyManager.CALL_STATE_RINGING) 
     callOutState = false; 

    else if(state == TelephonyManager.CALL_STATE_IDLE) 
     callOutState = true; 
} 

}

ответ

0

Так это выглядит, как у вас есть пара проблем здесь. Во-первых, вы пытаетесь начать свою деятельность при запуске Service - вы должны сделать этот код:

if(callOutState){ //if call end 
    Intent showRecord = new Intent(getBaseContext(), Call_Out_Record_Activity.class); 
    showRecord.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(showRecord);//open Call_Out_Record_Activity 
} 

в CallStateListener. Или просто поместите его в свой метод CatchCallState.

Затем обратите внимание на то, что нет «сигнала завершения вызова» - телефон перейдет от «OFF_HOOK» к «IDLE», чтобы вам нужны флаги для отслеживания этого. Также обратите внимание на то, что «ЗВОНОК» происходит при входящих вызовах, но не исходящих вызовах. Таким образом, вы можете отображать разные сообщения в зависимости от входящих или исходящих вызовов.

Смежные вопросы