2013-04-21 9 views
1

PhoneStateListener를 사용하여 모바일 통화 상태의 변경 사항을 수신 대기 중입니다. 제가하고있는 일은 몇 초 후에 전화를 걸고 이전 활동으로 돌아가는 것입니다. 그러나 다시 활동으로 돌아갈 때마다 CallThread가 다시 실행되며, 전화를 몇 번이나하고 전화를받는 상황에 빠지게됩니다. 아무도 도와 줄 수 있습니까? 고맙습니다!전화 후 이전 활동으로 돌아 가기

이것은 내가 활동의 onCreate() 메소드에 넣은 것입니다.

Thread CallThread = new Thread(CallRunnable); 
    CallThread.start(); 

전화를 걸기 위해 실행 파일을 설정합니다. 내 PhoneStateListener에서

Runnable CallRunable = new Runnable() { 

    @Override 
    public void run() { 
     try { 
      Thread.sleep(5 * 1000); //wait for 5 secs and then make phone call 
     } catch (InterruptedException e) { 
     } 

     makePhoneCall(phoneNO); 

    } 
}; 

, 다시 전화를 할 것입니다 물론

public class MyPhoneStateListener extends PhoneStateListener { 

    private boolean isCalling = false; 

    @Override 
    public void onCallStateChanged(int state, String phoneNumber) { 

     switch (state) { 
     case TelephonyManager.CALL_STATE_OFFHOOK: 
      isCalling = true; 
      break; 
     case TelephonyManager.CALL_STATE_IDLE: 
      Log.i("Call", "IDLE"); 
      if (isCalling) { 

       Intent i = new Intent(getIntent()); 
       i.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
       startActivity(i); 

       isCalling = false; 

      } 
      break; 
     default: 
      break; 
     } 
    } 
} 

답변

0
public class MyPhoneStateListener extends PhoneStateListener { 

private boolean isCalling = true; 
private int mCurrentState = TelephonyManager.CALL_STATE_IDLE; 

@Override 
public void onCallStateChanged(int state, String phoneNumber) { 

if (state != mCurrentState) {  
    switch (state) { 
     case TelephonyManager.CALL_STATE_OFFHOOK: 
      break; 
     case TelephonyManager.CALL_STATE_IDLE: 
      Log.i("Call", "IDLE"); 
      if (isCalling) { 

       Intent i = new Intent(getIntent()); 
       i.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
       startActivity(i); 

       isCalling = false; 

      } 
      else { 
       isCalling = true; 
      } 
      break; 
     default: 
      break; 
     } 
    mCurrentState = state; 
    } 
} 

}

0

때문에 때마다 다시 전화 통화 IDLE 상태에서 당신 당신, 재발 활동, 그것 때문에 다시 생성됨, 다시 작성, 추가 매개 변수를 추가하여 전화에서 새로 작성 또는 다시 호출했는지 확인하거나 SharedPreference에 저장

관련 문제