Recuperar el número de teléfono de la llamada entrante en Android

Me gustaría recuperar el número de teléfono de la llamada entrante y hacer algo con él como hacer enhttp://blog.whitepages.com/2009/02/27/caller-id-by-whitepages-a-new-android-app-that-puts-telemarketers-on-alert/

¿Podría ayudarme, por favor, porque no puedo encontrar información sobre esto? ¿Por dónde empiezo y cómo consigo el número de teléfono?

Ok así que 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 que hte CustomPhoneStateListener funcione. Como puede ver, he registrado mi receptor customPhoneState en el receptor, pero el mensaje de registro nunca se imprime desde la clase CustomPhoneStateListener. ¿Qué me falta aquí? ¿Mi pensamiento es 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);

}

Respuestas a la pregunta(2)

Su respuesta a la pregunta