2

I am using the following broadcast receiver to retrieve outgoing phone number.

@Override
public void onReceive(Context context, Intent intent) {
    mContext = context;
    mIntent = intent;
    TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    int events = PhoneStateListener.LISTEN_CALL_STATE;
    tm.listen(phoneStateListener, events);
}

private final PhoneStateListener phoneStateListener = new PhoneStateListener() {
    @Override
    public void onCallStateChanged(int state, String incomingNumber) {



        switch (state) {
        case TelephonyManager.CALL_STATE_IDLE:

            break;

        case TelephonyManager.CALL_STATE_OFFHOOK:


                dialingNumber = mIntent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
                Toast.makeText(mContext, "Local Call Number- " + dialingNumber,Toast.LENGTH_SHORT).show();


                break;
            }
                return;
        }



        Log.i(">>>Broadcast", "onCallStateChanged " + callState);
        super.onCallStateChanged(state, incomingNumber);
    }
};

Sometimes It returns null or number I called before.Is there another method to retrieve incoming/outgoing call phone number of the current call?

javanna
  • 59,145
  • 14
  • 144
  • 125
Basim Sherif
  • 5,384
  • 7
  • 48
  • 90

1 Answers1

13

for outgoing calls, use this:

manifest:

<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />

<receiver android:name=".MyPhoneReceiver" >
    <intent-filter>
        <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
    </intent-filter>
</receiver>

code:

...
@Override
public void onReceive(final Context context, final Intent intent) {
    Log.d("APP", "ACTION:" + intent.getAction());

    if (Intent.ACTION_NEW_OUTGOING_CALL.equals(intent.getAction())) {
        final String originalNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
        Log.d("APP", "outgoing,ringing:" + originalNumber);
    }
    ...

for incoming calls, use this:

manifest:

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

<receiver android:name=".MyPhoneReceiver" >
    <intent-filter>
        <action android:name="android.intent.action.PHONE_STATE" />
    </intent-filter>
</receiver>

code:

@Override
public void onReceive(final Context context, final Intent intent) {
    Log.d("APP", "ACTION:" + intent.getAction());
    final String stringExtra = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
    if (TelephonyManager.EXTRA_STATE_RINGING.equals(stringExtra)) {
            final String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
            Log.d("APP", "incoming,ringing:" + incomingNumber);
        } else if (stringExtra.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
            final String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
            Log.d("APP", "hanged" + incomingNumber );
        } else if (stringExtra.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) {
            final String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
            Log.d("APP", "answered" + incomingNumber );
        }
    }
android developer
  • 114,585
  • 152
  • 739
  • 1,270
  • How can we know that call is ended? – Md Mohsin Dec 11 '14 at 05:14
  • 1
    @MdMohsin For both incoming and outgoing calls, you can see that there is a text I've written "hanged" . – android developer Dec 11 '14 at 06:17
  • Okk sir..One more question if you don't mind. I am using outgoing and incoming call receiver but it sometime fire and sometime not..even i used priority in intent filer in androidmanifast.xml – Md Mohsin Dec 11 '14 at 06:39
  • check this please http://stackoverflow.com/questions/27417135/why-outgoing-call-state-is-not-working-in-android – Md Mohsin Dec 11 '14 at 07:06
  • @MdMohsin It's possible that the intent is being sent a bit later. Have you waited long enough? – android developer Dec 11 '14 at 07:50
  • Please check my question posted on stack overflow..my code is working correctly but giving error for outgoing call..even given outgoing number correctly. – Md Mohsin Dec 11 '14 at 07:51