2011-10-25 2 views
0

앱을 개발 중이며 앱 내에서 전화를 시작할 수 있었지만 종료되면 정보가 보존되고 팝업이 나타나기 시작하여 앱을 다시 시작하려고합니다.Android start 통화 종료 후 방법

전화를 걸고 별도의 인스턴스로 나오지만 팝업 할 수 없었습니다. 이 질문은 올해 3 월에 답변되었지만, 다른 사람들이 더 좋은 아이디어를 내놓았는지 알고 싶었습니다. 고맙습니다.

답변

5

활동 라이프 사이클 다이어그램을 보면 전화가 걸려 오면 응용 프로그램에 onPause() 메서드가 호출됩니다. 내가 생각할 수있는 것은 응용 프로그램이 사용자에게 더 이상 보이지 않는 경우에 상관없이 실행되는 스레드에서 데이터를 쓰는 SharedPreferences을 사용하여 데이터를 저장하는 것입니다. 호출 수신기 또는 onPause() 메서드에서이 작업을 수행해야합니다. 그러나보다 실제적인 접근법은 onRestoreInstanceState() 방법으로 최근에 복원 될 모든 관련 데이터를 넣는 방법 인 onSaveInstanceState()을 사용하는 것입니다.

Another activity comes in front

더 읽기 여기 그들이 작동하는 방법 :에 갈 때 호출이 발생한 경우 PhoneStateListener 클래스에서

http://developer.android.com/reference/android/app/Activity.html#onRestoreInstanceState(android.os.Bundle) http://developer.android.com/reference/android/app/Activity.html#onSaveInstanceState(android.os.Bundle) http://developer.android.com/reference/android/telephony/PhoneStateListener.html

당신이 표시하는 일부 flags을 사용할 수 있습니다 CALL_STATE_RINGING 상태로 설정 한 다음 CALL_STATE_IDLE에 전화가 걸려오고있을 때마다 IDLE 상태가 항상 발생하기 때문에 전화가 걸려 있는지 확인합니다. 하지만 플래그를 가지고있을 때 if(flag)을 확인하고 플래그를 변경하면 청취자가 다시 CALL_STATE_IDLE에있을 때마다 플래그가 반전되어 아무 작업도 수행되지 않습니다. 그냥 생각.

편집 :가 활동/서비스 클래스에서 내부 클래스로하여 PhoneStateListener 클래스를 추가하고 TelephonyManager를 사용하여 전화 상태 리스너를 등록합니다. 당신이 길을 찾을 수 있기를 바랍니다.

public class MyClassActivity extends Activity 
{ 
    .... 
    //set here your call listener here 

} 



protected class PhoneState extends PhoneStateListener{ 
     private boolean mCall=false; 
     @Override 
     public void onCallStateChanged(int state, String incomingNumber) { 


      switch(state) 
      { 
      case TelephonyManager.CALL_STATE_RINGING: 
       mCall=true; //fire the flag that there is call ongoing 
       break; 
      case TelephonyManager.CALL_STATE_IDLE: 
       if(mCall) 
       { 
        mCall=false; //Reverting the flag, indicating you are aware that there was call 
        // Here do the rest of your operation you want 
       } 
       break; 

      default: 
       }  
      super.onCallStateChanged(state, incomingNumber); 
     } 

    } 
+0

이것은 매우 유용합니다! 나는이 개념으로 바닥에 깔려있다. 이 행동의 예를 어디서 발견 할 수 있는지 모르겠습니까? 나는이 모든 개념에 대해 머리를 쓰려고 노력하고있다. 니콜라, 고마워! – smithseanp16

+0

전화 상태 수신기에 대한 아이디어를 추가했습니다. 만약 당신이 나를 원한다면, 나는 SharedPrefs, onSaveInstnc(), onRstrInstnc() ...을 위해 당신을 위해 글을 쓸 것입니다.하지만이 몇 가지에 대해서는 많은 예제가 있다고 생각합니다. 건배. –

+1

이것은 믿기지 않을 정도로 완벽합니다! – smithseanp16