Stap 6: Hoe dit werkt?
Het protocol is meer dan eenvoudige draadloze communicatie, het omvat ook pairing en als USB-communicatie protocol enkele toepassing identificatie. De Bluetooth heeft een UUID voor elk protocol, sommige goed bekend en sommige aan jou om uit te voeren. Ik gebruikte de Serial via Bluetooth voor eenvoud natuurlijk in een gloednieuwe plaats. Vervolgens in Bluetooth zoals in USB is er de notie van Host- en clientcomputers. De host is wachten op oproepen terwijl klanten ze genereren. Voor mij, het duurde enige tijd om dit uit te stellen, en de telefoon in de host-modus en de accessoire in clientmodus geplaatst. Het accessoire dat moet worden gevoed door een stroomvoorziening van zal proberen verbinding maken de hele tijd, en de telefoon die natuurlijk op batterijen is doet het minder macht verbruiken taak van het wachten voor een Bluetooth-verbinding.
Volgende, Android...
Nou als je een programmeur Arduino bent dit kan er heel vreemd voor u uitzien, maar programma's in Android zijn niet monolithische als in de Arduino. Een toepassing is echt een collectie van codefragmenten die wordt uitgevoerd in bepaalde omstandigheden of gevallen. Natuurlijk is de te gebruiken taal Java, dus dat zou ook verschillende. Laat me u een voorbeeld geven: de informaties te beschikken over accustatus (hoeveel u hebt verlaten, als het volledige of niet enz.) er is geen functie van de API op te roepen en het poll. U registreren eigenlijk een functie/methode u schrijven die wordt aangeroepen door het systeem een keer iets over de wijzigingen van de batterij. Hetzelfde over gemiste oproepen, je krijgt niet die informatie uit een query naar een API... u registreert een callback-functie met het systeem zodat zodra er een wijziging in de logboekdatabase oproep op het systeem, het zal ook uw geregistreerde functie aanroepen. Wanneer uw Android app. wil onderzoeken van deze logboeken van gesprekken of SMS of het luisteren naar uitzendingen van de batterij, moet u ook machtigingen toevoegen aan uw toepassing zodat zij dat kan doen. Anders, zal het systeem stil uw verzoek om te worden aangemeld of een listener aan deze bericht negeren.
Vervolgens wilde ik het accessoire aan de auto-connect zodra de telefoon in bereik is, om te doen dat u nodig hebt om iets op de achtergrond werken, zoals ik verwacht niet dat de toepassing de actieve toepassing het allertijden. Voor dat het volstaat niet om te schrijven een Android activiteit, maar moet u een Android dienst te hebben. De service wordt uitgevoerd door de Android activiteit als het begint. Maar om dingen op het scherm telefoon weer te geven moet u een activiteit en niet een service. OK, dus dienst moet de activiteit vertellen over wat het gevonden. Te doen verzendt informatie in een publiceren-abonneren mechanisme waarop de activiteit eerder geregistreerd. De service is ook het stukje code dat via Bluetooth met een accessoire communiceert. Dat is belangrijk want het is niet verstandig om te noemen blokkerende oproepen (zoals netwerk of draadloze Lees- en schrijfbewerkingen) van de activiteit. Activiteit moet er volledig klaar om te interageren met de eindgebruiker.
Laatst, wilde ik de telefoon controleren van de intensiteit van het display. Om dat te doen de activiteit die een UI-component, moeten de service vertellen wat de gebruiker heeft besloten de intensiteit te zijn. Een ander ding om te registreren voor... Maar hoe weet ik wat de intensiteit is nu? Nou, voor dat ik had de Arduino code antwoord op query door de telefoon, de Service zal geven deze query op verbinding en bijwerken van de activiteit over het huidige intensiteitsniveau. Klinkt ingewikkeld? Niet echt, maar zeker vervelend uit te voeren.
Als u de informatie over de batterij, ik registreren van een BroadcastReceiver en vond dat het krijgen van elke 30 seconden heet.
De gemiste oproepen ding werkt perfect, maar de SMS informatie is wat lastig. Er is een melding over nieuwe inkomende SMS, maar geen melding wanneer gebruiker een SMS leest. Dus, ben ik de SMS log polling elke keer krijg ik de melding batterij ook. Dat betekent dat op inkomende SMS het display zal update onmiddellijk zodat er een, maar zodra u de SMS lezen het maximaal 30 seconden voordat het display duren kan zodat er zijn geen ongelezen SMS-berichten meer. Voor mij is dit een aanvaardbaar compromis en als ik een betere manier vinden zal, ik zal het gebruiken.
Please bare in gedachten dat dit eigenlijk mijn eerste Android programma is. Het heeft al een tijdje geleden dat ik schreef enige Java-code ook (meer dan tien jaar). Ik heb nooit om het even wat met Bluetooth of... De code is gegaan van bestaande Android steekproef code ook vooral het BluetoothChat voorbeeld.