web-dev-qa-db-fra.com

Récupérez 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 faire quelque chose avec lui comme le faire dans http://blog.whitepages.com/2009/02/27/caller-id-by-whitepages-a-new- Android-app-that-met-telemarketers-on-alert /

Pourriez-vous s'il vous plaît m'aider parce que je ne trouve aucune information à ce sujet. Où dois-je commencer et comment 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 du journal est imprimé. Je peux récupérer le numéro de téléphone du forfait. Mais! Je n'arrive pas à faire fonctionner CustomPhoneStateListener. Comme vous pouvez le voir, j'ai enregistré mon écouteur customPhoneState sur le récepteur, mais le message du journal n'est jamais imprimé à partir de la classe CustomPhoneStateListener. Qu'est-ce que je manque ici? Ma pensée est-elle correcte?


<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);

}
44
jakob

Utilisez PhoneStateListener . Il a un gestionnaire onCallStateChanged ; l'un des arguments fournis que vous obtiendrez est un String contenant le numéro de téléphone entrant.

25
John Feminella

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 vous l'avez pour onReceive().

5
mikeplate