10 votes

Comment puis-je programmer un appel à une sonnerie et comment puis-je savoir si la ligne que j'appelle est coupée ?

Je veux que mon application Android soit capable de savoir si un numéro de téléphone donné fonctionne en effectuant un appel à une sonnerie (c'est-à-dire que j'appelle le numéro, j'attends que la première sonnerie retentisse de mon côté, puis je raccroche). S'il n'y a pas de sonnerie (c'est-à-dire si le téléphone est déconnecté), je veux aussi le savoir. C'est une sorte de ping sur un numéro de téléphone. Si c'est possible, comment faire ?

1voto

Nick Cardoso Points 4864

Le son auquel vous faites référence est appelé "Ringback". La "tonalité de numérotation" est le son que vous entendez lorsque vous décrochez un téléphone connecté qui n'est pas en cours d'appel.

Android Téléphonie ne donnent pas aux applications SDK l'accès à l'écoute des appels, de sorte qu'il ne semble pas possible de surveiller le retour d'appel à moins d'avoir recours au NDK (bien que les classes certaines personnes ont fait état de succès dans l'écoute des appels entrants et des appels sortants. sortant appel audio avec hacks)

Le problème avec votre approche est que même si vous parvenez à obtenir l'audio, vous devrez écouter le son sur la ligne pour une pause - ce qui n'est pas fiable car certains fournisseurs lisent des messages automatisés pour les statuts invalides et d'autres permettent même à l'utilisateur de télécharger leurs propres sons de retour d'appel (comme une chanson).

La meilleure option pour vous est d'écouter quand TelephonyManager.EXTRA_STATE_RINGING commence et attend un certain temps arbitraire avant de raccrocher. D'autres États, tels que CALL_STATE_OFFHOOK ne sont pas pertinentes pour votre situation.

public void onReceive(Context context, Intent intent) {
    if (timer == null && TelephonyManager.EXTRA_STATE_RINGING.equals(intent.getStringExtra(TelephonyManager.EXTRA_STATE))) {
        timer = new Handler(); //member variable
        timer.postDelayed(new Runnable() {
            @Override
            public void run() {
                hangUp();
            }
        }, 1500); //arbitrary delay
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X