You should use PhoneStateListener :
TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); tm.listen(mPhoneListener, PhoneStateListener.LISTEN_CALL_STATE); // somewhere else private PhoneStateListener mPhoneListener = new PhoneStateListener() { public void onCallStateChanged(int state, String incomingNumber) { try { switch (state) { case TelephonyManager.CALL_STATE_RINGING: // do something... break; case TelephonyManager.CALL_STATE_OFFHOOK: // do something... break; case TelephonyManager.CALL_STATE_IDLE: // do something... break; default: Log.d(TAG, "Unknown phone state=" + state); } } catch (RemoteException e) {} } };
Be sure to include this permission in your manifest:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
Cristian
source share