/ / Obtener el número de teléfono en Call End Broadcast Receiver? - android, android-intent, broadcastreceiver

¿Obtener número de teléfono en Call End Broadcast Receiver? - Android, intención de Android, receptor de radiodifusión

Estoy desarrollando una aplicación que hace seriesde llamadas una tras otra. Para detectar que la llamada ha finalizado, he creado Broadcast Receiver que se activó con éxito cuando finaliza la llamada, pero no puedo obtener el número de teléfono. Aqui esta mi codigo

public class EndCallReceiver extends BroadcastReceiver {

Preferences pref;
Context ctx;

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

ctx = context;
pref = new Preferences(ctx);

Bundle extras = intent.getExtras();
if (extras != null) {
String state = extras.getString(TelephonyManager.EXTRA_STATE);
String incomingNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);


if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
Toast.makeText( ctx, incomingNumber, Toast.LENGTH_LONG).show();
}


}
}

}

No se muestra nada en Toast. entranteNumber es nulo. Alguien me puede decir. ¿Cómo puedo obtener el número de teléfono dentro de la llamada final BroadcastReceiver?

Respuestas

1 para la respuesta № 1

En su AndroidManifest.xml necesita registrar la transmisión:

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

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

Tu codigo:

public class EndCallReceiver extends BroadcastReceiver {

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

Bundle bundle = intent.getExtras();
String phoneNumber= bundle.getString("incoming_number");
}

}

1 para la respuesta № 2

El problema es que cuando se llama a continuación no hay ningún número de teléfono asociado.

if (state.equals(TelephonyManager.EXTRA_STATE_IDLE))

Pruebe el siguiente código:

Cuando suena el teléfono, se guarda el número de teléfono y más tarde cuando la llamada se desconecta y se muestra el número anterior.

public class CallReceiver extends BroadcastReceiver {

static boolean isRinging = false;
String number = "";

@Override
public void onReceive(Context context, Intent intent) {
Log.v("ranjith", "entered onregister");
// Get the current Phone State
String phoneState = intent.getStringExtra(TelephonyManager.EXTRA_STATE);

if (phoneState == null)
return;

// If phone is "Ringing"
if (phoneState.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
isRinging = true;
number = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
Log.v("ranjith", "phone ringing");
}

// if phone is idle after ringing
if (phoneState.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
Log.v("ranjith", "call ended of number" + number);
Toast.makeText(context, "Number is " + number, Toast.LENGTH_LONG).show();
}
}
}