I'm using an intent-filter to listen to changes in PHONE_STATE
    <!-- Listen for phone status changes -->
    <receiver android:name=".IncomingCallReciever">
           <intent-filter>
               <action android:name="android.intent.action.PHONE_STATE" />
           </intent-filter>
    </receiver>
... and can easily detect an incoming call
       intent != null 
    && intent.getAction().equals(TelephonyManager.ACTION_PHONE_STATE_CHANGED)
    && intent.hasExtra(TelephonyManager.EXTRA_STATE)
    && intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_RINGING)
... but how can I determine if it is line 1 or line 2 that is ringing?
My application needs to react ONLY when the user is currently on a phone call and another call is coming in.
I found a way to implement this... posting it for "the next guy".
In a nutshell, the phone state moves between three states:
When a 'RINGING' state is broadcast, it is immediately followed by an IDLE or OFF_HOOK to restore the state to what it was pre-incoming-call.
Put it all together and you end up with this:
package com.telephony;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
public class PhoneStateChangedReciever extends BroadcastReceiver {
    private static String lastKnownPhoneState = null;
    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent != null && intent.getAction().equals(TelephonyManager.ACTION_PHONE_STATE_CHANGED)) {
            //State has changed
            String newPhoneState = intent.hasExtra(TelephonyManager.EXTRA_STATE) ? intent.getStringExtra(TelephonyManager.EXTRA_STATE) : null;
            //See if the new state is 'ringing'
            if(newPhoneState != null && newPhoneState.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
                //If the last known state was 'OFF_HOOK', the phone was in use and 'Line 2' is ringing
                if(lastKnownPhoneState != null && lastKnownPhoneState.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) {
                    ...
                }
                //If it was anything else, the phone is free and 'Line 1' is ringing 
                else {
                    ... 
                }
            }
            lastKnownPhoneState = newPhoneState;
        }
    }
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With