2013-04-21 3 views
1

Я использую PhoneStateListener для прослушивания изменений состояния мобильного вызова. Я работаю над тем, чтобы сделать телефонный звонок через несколько секунд, а затем вернуться к предыдущей деятельности. Тем не менее, каждый раз, когда я снова вернусь к активности, он снова запустит CallThread, и я поймаю в ловушку ситуацию, которая делает вызов после вызова снова и снова. Может ли кто-нибудь помочь? Спасибо!Возврат к предыдущему действию после телефонного звонка

Это то, что я использовал в методе onCreate().

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

Он установит возможность выполнения телефонного звонка.

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

    } 
}; 

В моей PhoneStateListener,

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 состояния вы, возобновить деятельность, так это triggered onCreate снова, поместил там параметр дополнительных параметров, чтобы вы могли проверить, вновь ли он создан или вернулся из телефонного звонка или сохранить его в SharedPreference.

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