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 ?
Réponse
Trop de publicités?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
}
}