¿Cómo puedo determinar si hay una llamada sonando en "línea 2" (por ejemplo, llamada en espera)

Estoy utilizando un filtro de intenciones para escuchar los cambios en PHONE_STATE

<!-- Listen for phone status changes --> <receiver android:name=".IncomingCallReciever"> <intent-filter> <action android:name="android.intent.action.PHONE_STATE" /> </intent-filter> </receiver> 

… y puede detectar fácilmente una llamada entrante

  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) 

… pero ¿cómo puedo determinar si es la línea 1 o la línea 2 que está sonando?

Mi aplicación necesita reaccionar SOLAMENTE cuando el usuario está actualmente en una llamada telefónica y otra llamada está entrando.

Encontré una forma de implementar esto … publicándolo para "el siguiente tipo".

En pocas palabras, el estado del teléfono se mueve entre tres estados:

  1. 'IDLE' – No utilizas el teléfono
  2. 'RINGING' – Se está recibiendo una llamada
  3. 'OFF_HOOK' – El teléfono está desconectado

Cuando se emite un estado de "RINGING", inmediatamente es seguido por un IDLE o OFF_HOOK para restaurar el estado a lo que fue llamada pre-entrante.

Ponlo todo junto y usted termina para arriba con esto:

 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; } } } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.