Étape 6: Comment cela fonctionne ?
Le protocole est plus qu’une simple communication sans fil, il inclut également l’appariement et comme communication USB quelque application protocole d’identification. Le Bluetooth a un UUID pour chaque protocole, certains bien connu et autres à vous de mettre en œuvre. J’ai utilisé la série via Bluetooth pour plus de simplicité bien sûr plutôt que de la mise en œuvre d’une nouvelle marque. Ensuite, en Bluetooth comme dans USB il y a la notion de l’hôte et client. L’hôte est en attente pour les appels alors que les clients génèrent eux. Pour moi, il a fallu du temps pour comprendre ce point et mis le téléphone en mode hôte et l’accessoire en mode client. L’accessoire qui est censée être alimenté par un bloc d’alimentation va essayer de connecter tout le temps, et le téléphone qui est évidemment alimenté par piles fera le moins d’énergie consommant la tâche de l’attente d’une connexion Bluetooth.
A côté, Android...
Eh bien, si vous êtes un programmeur Arduino cela pourrait ressembler très étrange pour vous, mais programmes dans Android ne sont pas monolithiques comme dans l’Arduino. Une application est vraiment une collection de fragments de code qui est exécutée dans des conditions ou des cas. Bien sûr la langue à utiliser est de Java, alors ce serait trop différent. Laissez-moi vous donner un exemple : d’avoir les informations sur l’état de la batterie (combien il vous reste, s’il est complet ou pas etc.), il n’y a aucune fonction API pour appeler et il interroge. Vous vous inscrivez en fait une fonction/méthode que vous écrivez qui est appelée par le système une fois quelque chose sur les changements de batterie. Même chose au sujet des appels manqués, vous n’obtenez pas ces informations d’une requête à une API..., vous enregistrez une fonction de rappel avec le système afin qu’il y a un changement à la base de données du journal des appels sur le système, il appellera également votre fonction enregistrée. Quand votre app Android veut examiner ces journaux d’appels ou de SMS ou de l’Ecoute aux diffusions de batterie, vous devez également ajouter des autorisations pour votre application afin qu’il peut le faire. Dans le cas contraire, le système ignore silencieusement votre demande à être notifié ou être un auditeur de ces messages.
Ensuite, j’ai voulu l’accessoire de connexion automatique une fois que le téléphone est en éventail, de faire que vous devez avoir quelque chose qui fonctionne en arrière-plan, comme je ne m’attends pas l’application à l’application active tout le temps. Pour qu’il ne suffit pas d’écrire une activité Android, mais vous devez avoir un service Android trop. Le service est exécuté par l’activité Android qu’il commence. Mais pour afficher des choses sur l’écran du téléphone... vous avez besoin d’une activité et non un service. OK, donc le service doit parler de ce qu’elle a l’activité. Faire qu’il envoie des informations dans une publication-abonnement mécanisme auquel l’activité enregistrée plus tôt. Le service est aussi le morceau de code qui communique via Bluetooth avec l’accessoire. C’est important parce qu’il n’est pas sage d’appeler le blocage d’appels (comme le réseau ou sans fil lu et écrit) de l’activité. L’activité doit être là tout à fait prêts à interagir avec l’utilisateur final.
Enfin, j’ai voulu avoir le téléphone contrôlant l’intensité de l’affichage. Pour ce faire l’activité qui est un composant d’interface utilisateur, il faut indiquer au service de ce que l’utilisateur décide de l’intensité d’être. Une autre chose à vous inscrire à... Mais comment savoir ce que l’intensité est maintenant ? Eh bien, pour que j’ai eu la réponse de code Arduino à la requête par le téléphone, le Service va exécuter cette requête sur la connexion et mise à jour de l’activité sur le niveau actuel d’intensité. Cela vous semble complexe ? Pas vraiment, mais certainement pénible à mettre en œuvre.
Pour obtenir des informations sur la batterie, j’ai enregistrer un BroadcastReceiver et trouvé qu’on l’appelle obtenir toutes les 30 secondes.
La chose d’appels manqués fonctionne parfaitement, mais l’information SMS est quelque peu délicate. Il y a une notification de nouveau SMS entrants, mais pas de notification lorsque l’utilisateur lit un SMS. Donc, je suis du scrutin le journal des SMS chaque fois que je reçois la notification de batterie trop. Cela signifie que le SMS entrant, l’affichage sera mise à jour immédiatement pour montrer il est l’un, mais une fois que vous avez lu le SMS il pourrait prendre jusqu'à 30 secondes pour l’affichage pour montrer qu'il n’y a plus aucun message SMS non lus. Pour moi, c’est un compromis acceptable et si je vais trouver une meilleure façon, je vais l’utiliser.
S’il vous plaît nu à l’esprit que c’est en fait mon premier programme Android. Il a été un bon moment que j’ai écrit tout code Java trop (plus d’une décennie). Je n’ai jamais rien avec Bluetooth non plus... Le code a commencé a partir d’Android existante sample code aussi, principalement l’exemple BluetoothChat.