Ya sanjana is right that code works for me.. but instead of giving postdelay 100msec give more then 1.5 sec.. Bcoz to start incoming screen needs 800 to 1000msec.. I copied her code only but modified a bit.. Try this works fine...
@Override
public void onReceive(final Context context, Intent intent) {
Bundle extras = intent.getExtras();
if (extras != null) {
String state = extras.getString(TelephonyManager.EXTRA_STATE);
final String incomingNumber = extras.getString("incoming_number");
Handler callActionHandler = new Handler();
Runnable runRingingActivity = new Runnable() {
@Override
public void run() {
Intent intentPhoneCall = new Intent("android.intent.action.ANSWER");
intentPhoneCall.putExtra("INCOMING_NUM", incomingNumber);
intentPhoneCall.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intentPhoneCall);
}
};
if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
callActionHandler.postDelayed(runRingingActivity, 2000);
}
if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
callActionHandler.removeCallbacks(runRingingActivity);
// setResultCode(Activity.RESULT_CANCELED);
}
}
}
Then use PhoneStateListener at receiver class side.. I used like this....
/*********** My receiver class onCreate() contains ************/
TelephonyManager telephony = (TelephonyManager)
getSystemService(getApplicationContext().TELEPHONY_SERVICE);
telephony.listen(myListener, PhoneStateListener.LISTEN_CALL_STATE);
class MyPhoneStateListener extends PhoneStateListener {
Activity curActivity;
public MyPhoneStateListener(Activity _curActivity){
this.curActivity = _curActivity;
}
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
Log.i("TEST APP", "Cal End");
curActivity.finish();
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.i("TEST APP", "Hello");
break;
case TelephonyManager.CALL_STATE_RINGING:
Log.i("TEST APP", "Calling...");
break;
}
}
}