2011-05-10 11 views
25

Deseo saber si estoy atendiendo una llamada.¿Cómo saber si tengo una llamada en Android?

Si estoy en una llamada a continuación, iniciar el servicio (parte del servicio está claro). ¿Cómo hago esto?

Mientras que atendía a la llamada que necesito para llamar al servicio ... no tengo conocimiento de cómo hacer esto? ¿Alguna ayuda?

+4

¿Quiere decir en una "llamada telefónica", una "llamada de método" o alguna otra llamada? (Llamada de apareamiento? Cortina de llamada? Lauren Bacall? :-)) –

+0

sí su llamada de teléfono ... – Rockin

Respuesta

53

Es necesario transmitir receptor ...

En el receptor de declarar emisión manifiesta ...

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

declaran también utiliza en el permiso ...

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

La clase de receptor de radiodifusión. ..

package x.y; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.telephony.PhoneStateListener; 
import android.telephony.TelephonyManager; 

public class PhoneStateBroadcastReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
     telephonyManager.listen(new CustomPhoneStateListener(context), PhoneStateListener.LISTEN_CALL_STATE); 

    } 

} 

y una clase para personalizar los escucha el estado del teléfono ...

package x.y; 
import android.content.Context; 
import android.telephony.PhoneStateListener; 
import android.telephony.TelephonyManager; 

public class CustomPhoneStateListener extends PhoneStateListener { 

    //private static final String TAG = "PhoneStateChanged"; 
    Context context; //Context to make Toast if required 
    public CustomPhoneStateListener(Context context) { 
     super(); 
     this.context = context; 
    } 

    @Override 
    public void onCallStateChanged(int state, String incomingNumber) { 
     super.onCallStateChanged(state, incomingNumber); 

     switch (state) { 
     case TelephonyManager.CALL_STATE_IDLE: 
      //when Idle i.e no call 
      Toast.makeText(context, "Phone state Idle", Toast.LENGTH_LONG).show(); 
      break; 
     case TelephonyManager.CALL_STATE_OFFHOOK: 
      //when Off hook i.e in call 
      //Make intent and start your service here 
      Toast.makeText(context, "Phone state Off hook", Toast.LENGTH_LONG).show(); 
      break; 
     case TelephonyManager.CALL_STATE_RINGING: 
      //when Ringing 
      Toast.makeText(context, "Phone state Ringing", Toast.LENGTH_LONG).show(); 
      break; 
     default: 
      break; 
     } 
    } 
} 
+2

déjame revisar y marcar como respuesta ... gracias Owayz – Rockin

+0

IAM no puede encontrar UDF – Rockin

+0

UN problema al instalar esta aplicación y el teléfono recibe una llamada ... en modo de depuración, el control no llega a onReceive – Rockin

26

TelephonyManager.getCallState() vuelve uno de

  • CALL_STATE_IDLE
  • CALL_STATE_OFFHOOK
  • CALL_STATE_RINGING

Si esto se ajusta a sus necesidades, es mucho menos código que Flautista de más solución integral.

+1

Creo que es una solución mucho mejor. En el primer caso, se agrega un nuevo oyente a cada cambio de estado del teléfono. – Goo

+0

+1 No sabía que existía ese método. Pero este método será solo de ayuda si queremos conocer el estado de la llamada en un momento determinado, pero no ayudará a monitorear los estados de las llamadas telefónicas todo el tiempo. –

+4

((TelephonyManager) getSystemService (Context.TELEPHONY_SERVICE)). GetCallState() para novatos –

Cuestiones relacionadas