Recuperar el número de teléfono de la llamada entrante en Android
-
13-09-2019 - |
Pregunta
Me gustaría recuperar numero de teléfono de la llamada entrante y hacer algo con él, como el do en http://blog.whitepages.com/2009/02/27/caller-id-by-whitepages-a-new-android-app-that-puts-telemarketers-on-alert/
¿Me puede ayudar porque no puedo encontrar ninguna información sobre esto. ¿por dónde empezar y cómo consigo controlar la numero de teléfono?
La autorización así que actualmente mi código es el de abajo. Cuando coloco la llamada del CustomBroadcastReceiver coge y el mensaje de registro se imprime. Puedo recuperar el número de teléfono desde el haz. ¡Pero! No puedo conseguir HTE CustomPhoneStateListener de trabajo. Como se puede ver que he registrado mi oyente customPhoneState al receptor, pero el mensaje de registro nunca se elaborará a partir del de la clase CustomPhoneStateListener. ¿Qué soy yo mi falta aquí? ¿Es correcta mi pensamiento?
<receiver android:name=".CustomBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
</application>
<uses-sdk android:minSdkVersion="5" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
public class CustomPhoneStateListener extends PhoneStateListener {
private static final String TAG = "CustomPhoneStateListener";
public void onCallStateChange(int state, String incomingNumber){
Log.v(TAG, "WE ARE INSIDE!!!!!!!!!!!");
Log.v(TAG, incomingNumber);
switch(state){
case TelephonyManager.CALL_STATE_RINGING:
Log.d(TAG, "RINGING");
break;
}
}
public class CustomBroadcastReceiver extends BroadcastReceiver {
private static final String TAG = "CustomBroadcastReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.v(TAG, "WE ARE INSIDE!!!!!!!!!!!");
TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
CustomPhoneStateListener customPhoneListener = new CustomPhoneStateListener();
telephony.listen(customPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);
Bundle bundle = intent.getExtras();
String phoneNr= bundle.getString("incoming_number");
Log.v(TAG, "phoneNr: "+phoneNr);
}
Solución
PhoneStateListener
. Tiene una onCallStateChanged
manipulador; uno de los argumentos proporcionados que obtendrá es un String
que contiene el número de teléfono entrante.
Otros consejos
Su método reemplazado en CustomPhoneStateListener
debería llamarse onCallStateChanged()
(y no onCallStateChange()
).
Esto habría sido visto por el compilador de Java si hubiera tenido la anotación @Override
, al igual que usted tiene para onReceive()
.