java - programacion - ¿Cómo saber si tengo una llamada en Android?
manual de programacion android pdf (3)
Necesitas un receptor de transmisión ...
En manifiesto declarar receptor de difusión ...
<receiver android:name=".PhoneStateBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE"/>
</intent-filter>
</receiver>
También declara usos-permiso ...
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
La clase de receptor de difusió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 el oyente de 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;
}
}
}
Quiero saber si estoy atendiendo una llamada.
Si estoy atendiendo una llamada, empiece el servicio (la parte del servicio es clara). ¿Cómo hago esto?
Mientras asisto a la llamada, necesito llamar al servicio ... ¿desconozco cómo hacerlo? ¿Alguna ayuda?
Solo puedes saber que se recibe una llamada, pero no puedes modificarla. :( vea esto porque la versión 2.3 de Android no tiene android.permission.MODIFY_PHONE_STATE? y cuál es la solución para esto?
TelephonyManager.getCallState()
devuelve uno de
-
CALL_STATE_IDLE
-
CALL_STATE_OFFHOOK
-
CALL_STATE_RINGING
Si esto se ajusta a sus requisitos, es mucho menos código que la solución más completa de Pied Piper.