teléfono - como bloquear un numero en android
Recuperar el número de teléfono de la llamada entrante en Android (3)
Aquí hay una implementación que le permitirá recuperar el número de teléfono si se trata de una llamada entrante como incomingNumber y también cuando la llamada ha TERMINADO: tenga en cuenta el código del Manejador ().
private class PhoneCallListener extends PhoneStateListener {
private boolean isPhoneCalling = false;
@Override
public void onCallStateChanged(int state, String incomingNumber) {
if (TelephonyManager.CALL_STATE_RINGING == state) {
// phone ringing
Log.i(LOG_TAG, "RINGING, number: " + incomingNumber);
}
if (TelephonyManager.CALL_STATE_OFFHOOK == state) {
// active
Log.i(LOG_TAG, "OFFHOOK");
isPhoneCalling = true;
}
if (TelephonyManager.CALL_STATE_IDLE == state) {
// run when class initial and phone call ended, need detect flag
// from CALL_STATE_OFFHOOK
Log.i(LOG_TAG, "IDLE number");
if (isPhoneCalling) {
Handler handler = new Handler();
//Put in delay because call log is not updated immediately when state changed
// The dialler takes a little bit of time to write to it 500ms seems to be enough
handler.postDelayed(new Runnable() {
@Override
public void run() {
// get start of cursor
Log.i("CallLogDetailsActivity", "Getting Log activity...");
String[] projection = new String[]{Calls.NUMBER};
Cursor cur = getContentResolver().query(Calls.CONTENT_URI, projection, null, null, Calls.DATE +" desc");
cur.moveToFirst();
String lastCallnumber = cur.getString(0);
}
},500);
isPhoneCalling = false;
}
}
}
}
Y luego agregue e inicialice el oyente en su código onCreate o onStartCommand:
PhoneCallListener phoneListener = new PhoneCallListener();
TelephonyManager telephonyManager = (TelephonyManager) this
.getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(phoneListener,
PhoneStateListener.LISTEN_CALL_STATE);
Me gustaría recuperar el número de teléfono de la llamada entrante y hacer algo con él, como hacer en http://blog.whitepages.com/2009/02/27/caller-id-by-whitepages-a-new-android-app-that-puts-telemarketers-on-alert/
¿Podrían ayudarme porque no puedo encontrar información sobre esto? ¿Por dónde empiezo y cómo puedo obtener el número de teléfono?
Bueno, actualmente mi código se ve a continuación. Cuando realizo la llamada, CustomBroadcastReceiver lo detecta y se imprime el mensaje de registro. Puedo recuperar el número de teléfono del paquete. ¡Pero! No puedo hacer funcionar el CustomPhoneStateListener. Como puede ver, he registrado mi escucha personalizada de PhoneState en el receptor, pero el mensaje de registro nunca se imprime desde la clase CustomPhoneStateListener. ¿Qué es lo que me falta aquí? Es mi pensamiento correcto?
<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);
}
El método reemplazado en CustomPhoneStateListener
debe CustomPhoneStateListener
onCallStateChanged()
(y no onCallStateChange()
).
Esto podría haber sido detectado por el compilador de Java si hubiera tenido la anotación @Override
, como la que tiene para onReceive()
.
Use PhoneStateListener
. Tiene un controlador onCallStateChanged
; uno de los argumentos proporcionados que obtendrá es una String
contiene el número de teléfono entrante.