Problème
Comment puis-je distinguer entre l'impossibilité d'établir une connexion Bluetooth avec un appareil Android à distance parce que:Différencier entre "hors gamme" ou "à portée, mais pas de socket serveur d'écoute"? (Bluetooth)
- Scénario 1: le dispositif à distance est hors de portée, ou son Bluetooth est désactivé.
- scénario 2: le périphérique distant est à portée, mais il n'y a pas de socket serveur sur le périphérique distant pour accepter ma connexion.
Ce que j'ai essayé
Je ne pouvais pas différencier les exceptions lancées lors de la connexion parce qu'il a jeté les exceptions identiques dans les deux cas:
java.io.IOException: read failed, socket might closed or timeout, read ret -1
Je ne pouvais pas utiliser
fetchUuidsWithSdp()
pour vérifier si mon UUID pris en charge par le périphérique distant car il beha Ves la même manière dans les deux cas ... according to the documentation:Cette API est asynchrone et l'intention {@link de #ACTION_UUID} est envoyé, avec les UUID pris en charge par l'extrémité distante. S'il y a une erreur dans l'obtention des enregistrements SDP ou si le processus prend beaucoup de temps, l'intention {@link de #ACTION_UUID} est envoyé avec le UUID qui est actuellement présent dans le cache ...
son comportement aussi semble en quelque sorte imprévisible selon this SO thread.
enfin, je ne voulais pas utiliser
sdpSearch
de faire la différence entre les deux, parce que a été ajouté dans l'API 23, et je veux être en mesure de soutenir jusqu'à API 19.