Cómo detectar el número de teléfono de una llamada entrante en Android cuando la aplicación está cerrada?
Quiero detectar los números de teléfono de las llamadas entrantes/salientes cuando mi aplicación no se está ejecutando, está cerrada. He implementado el siguiente código, pero solo detecta la llamada si la aplicación se está ejecutando o en segundo plano, no funciona cuando la aplicación está cerrada.
public class CallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) {
String outgoingPhoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
showToast(context, "Llamada saliente a " + outgoingPhoneNumber);
} else if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_IDLE)) {
String callEndedNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
showToast(context, "Llamada finalizada a " + callEndedNumber);
} else if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_RINGING)) {
String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
showToast(context, "Llamada entrante de " + incomingNumber);
}
}
private void showToast(Context context, String message) {
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
}
}
Manifiestos
<receiver android:name=".CallReceiver" android:enabled="true" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE"></action>
</intent-filter>
</receiver>
davy.ai
Para detectar los números de teléfono de las llamadas entrantes/salientes cuando la aplicación no se encuentra en ejecución o está cerrada, necesitas registrar el receptor de difusión de manera dinámica utilizando el contexto de la aplicación en tu código. Puedes hacer esto agregando lo siguiente a tu MainActivity:
Esto registrará de manera dinámica el receptor de difusión cuando la aplicación se lance y lo desregistrará cuando la aplicación se destruya para evitar fugas de memoria.
Nota: Asegúrate de haber otorgado los permisos necesarios en tu archivo Manifest para detectar cambios en el estado del teléfono.