2012-03-31 41 views

回答

2

你必須爲PhoneState實現一個監聽器。我這樣做在一個私有類:

private class PhoneCallListener extends PhoneStateListener { 

    private boolean isPhoneCalling = false; 

    // needed for logging 
    String TAG = "PhoneCallListener"; 

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

     if (TelephonyManager.CALL_STATE_RINGING == state) { 
      // phone ringing 
      Log.i(TAG, "RINGING, number: " + incomingNumber); 
     } 

     if (TelephonyManager.CALL_STATE_OFFHOOK == state) { 
      // active 
      Log.i(TAG, "OFFHOOK"); 

      isPhoneCalling = true; 
     } 

     if (TelephonyManager.CALL_STATE_IDLE == state) { 
      // run when class initial and phone call ended, 
      // need detect flag from CALL_STATE_OFFHOOK 
      Log.i(TAG, "IDLE"); 

      if (isPhoneCalling) { 

       Log.i(TAG, "restart app"); 

       // restart call application 
       Intent i = getBaseContext().getPackageManager() 
         .getLaunchIntentForPackage(
           getBaseContext().getPackageName()); 
       i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK 
         | Intent.FLAG_ACTIVITY_CLEAR_TOP 
         | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
       startActivity(i); 

       isPhoneCalling = false; 
      } 

     } 


} 
} 

,你需要允許添加到清單,文件

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
+0

你好krains,我想檢查我可能重複當我的活動正在運行時的呼叫狀態此時,我希望我的應用程序在後臺運行並保持暫停狀態,而不是在呼叫結束後,我的應用程序會在該級別暫停時自動恢復。 – 2012-03-31 11:44:07

+0

我不確定它是否有效,但您可能會在這裏查看[android dev page](http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_SINGLE_TOP),並只添加FLAG_ACTIVITY_SINGLE_TOP標誌意圖。 – krains 2012-03-31 11:56:23

1
private class EndCallListener extends PhoneStateListener { 
    private boolean active = false; 
    @Override 
    public void onCallStateChanged(int state, String incomingNumber) { 
    if(TelephonyManager.CALL_STATE_RINGING == state) { 
     Log.i("EndCallListener", "RINGING, number: " + incomingNumber); 
    } 
    if(TelephonyManager.CALL_STATE_OFFHOOK == state) { 
     //wait for phone to go offhook (probably set a boolean flag) so you know your app initiated the call. 
     active = true; 
     Log.i("EndCallListener", "OFFHOOK"); 
    } 
    if(TelephonyManager.CALL_STATE_IDLE == state) { 
     //when this state occurs, and your flag is set, restart your app 
     Log.i("EndCallListener", "IDLE"); 
     if (active) { 
     active = false; 
     // stop listening     
     TelephonyManager mTM = (TelephonyManager) m_activity.getSystemService(Context.TELEPHONY_SERVICE); 
     mTM.listen(this, PhoneStateListener.LISTEN_NONE); 
     // restart the inbox activity 
     //Intent intent = new Intent(m_activity, MDInboxActivity.class); 
     //m_activity.startActivity(intent); 
     } 
    } 
    } 
} 

而且你可以通過調用下面的代碼初始化上述類:

try { 
    EndCallListener callListener = new EndCallListener(); 
    TelephonyManager mTM = (TelephonyManager) m_activity.getSystemService(Context.TELEPHONY_SERVICE); 
    mTM.listen(callListener, PhoneStateListener.LISTEN_CALL_STATE); 
} catch(Exception e) { 
    Log.e("callMonitor", "Exception: "+e.toString()); 
} 
+0

而不是重新啓動收件箱活動,您可以啓動您自己的活動。 – Ishu 2012-03-31 11:10:58

相關問題