Maybe try out this helper class i copied somewhere online, cannot remember where
/*Helper class to detect incoming and outgoing calls.*/
public class CallHelper {
private Activity activity;
private TelephonyManager tm;
private CallStateListener callStateListener;
private OutgoingReceiver outgoingReceiver;
public String TelephoneNumber;
public boolean InCall = false;
public CallHelper(Activity activity) {
this.activity = activity;
callStateListener = new CallStateListener();
outgoingReceiver = new OutgoingReceiver();
}
/*Listener to detect incoming calls.*/
private class CallStateListener extends PhoneStateListener {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_RINGING: {
TelephoneNumber = incomingNumber;
inout = "in";
InCall = false;
break;
}
case TelephonyManager.CALL_STATE_OFFHOOK: {
if (!InCall) {
InCall = true;
//Do your stuff here when in call...
}
break;
}
case TelephonyManager.CALL_STATE_IDLE: {
InCall = false;
break;
}
default: {
InCall = false;
break;
}
}
}
}
/*Broadcast receiver to detect the outgoing calls.*/
public class OutgoingReceiver extends BroadcastReceiver {
public OutgoingReceiver() { }
@Override
public void onReceive(Context context, Intent intent) {
TelephoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
}
}
/*Start calls detection.*/
public void start() {
tm = (TelephonyManager) activity.getSystemService(Activity.TELEPHONY_SERVICE);
tm.listen(callStateListener, PhoneStateListener.LISTEN_CALL_STATE);
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_NEW_OUTGOING_CALL);
activity.registerReceiver(outgoingReceiver, intentFilter);
}
/*Stop calls detection.*/
public void stop() {
tm.listen(callStateListener, PhoneStateListener.LISTEN_NONE);
activity.unregisterReceiver(outgoingReceiver);
}
}