Récupérer le numéro de téléphone de l’appel entrant dans Android

Je voudrais récupérer le numéro de téléphone de l’appel entrant et en faire quelque chose comme le fait dans http://blog.whitepages.com/2009/02/27/caller-id-by-whitepages-a-new-android-app- que-met-les-télévendeurs en alerte /

Pourriez-vous m’aider s’il vous plaît, car je ne trouve aucune information à ce sujet. Où puis-je commencer et comment puis-je obtenir le numéro de téléphone?


Ok donc actuellement mon code ressemble à ci-dessous. Lorsque je passe l’appel, CustomBroadcastReceiver l’attrape et le message de journal est imprimé. Je peux récupérer le numéro de téléphone du forfait. Mais! Je ne peux pas utiliser hte CustomPhoneStateListener pour fonctionner. Comme vous pouvez le voir, j’ai enregistré mon écouteur customPhoneState dans le récepteur mais le message de journal n’est jamais imprimé à partir de la classe CustomPhoneStateListener. Qu’est-ce qui me manque ici? Est-ce que ma pensée est correcte?


          

 public class CustomPhoneStateListener extends PhoneStateListener { private static final Ssortingng TAG = "CustomPhoneStateListener"; public void onCallStateChange(int state, Ssortingng 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 Ssortingng 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(); Ssortingng phoneNr= bundle.getSsortingng("incoming_number"); Log.v(TAG, "phoneNr: "+phoneNr); } 

    Utilisez PhoneStateListener . Il a un gestionnaire onCallStateChanged ; L’un des arguments fournis est une Ssortingng contenant le numéro de téléphone entrant.

    Voici une implémentation qui vous permettra de récupérer le numéro de téléphone s’il s’agit d’un appel entrant en tant que entrantNumber et aussi lorsque l’appel est FINISHED – notez le code Handler ().

     private class PhoneCallListener extends PhoneStateListener { private boolean isPhoneCalling = false; @Override public void onCallStateChanged(int state, Ssortingng 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..."); Ssortingng[] projection = new Ssortingng[]{Calls.NUMBER}; Cursor cur = getContentResolver().query(Calls.CONTENT_URI, projection, null, null, Calls.DATE +" desc"); cur.moveToFirst(); Ssortingng lastCallnumber = cur.getSsortingng(0); } },500); isPhoneCalling = false; } } } } 

    Et puis ajoutez et initialisez l’écouteur dans votre code onCreate ou onStartCommand:

     PhoneCallListener phoneListener = new PhoneCallListener(); TelephonyManager telephonyManager = (TelephonyManager) this .getSystemService(Context.TELEPHONY_SERVICE); telephonyManager.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE); 

    Votre méthode remplacée dans CustomPhoneStateListener doit être appelée onCallStateChanged() (et non onCallStateChange() ).

    Cela aurait été repéré par le compilateur Java si vous aviez eu l’annotation @Override , comme pour onReceive() .