Bluetooth-mobiltelefon tillbehör för missade samtal och SMS (6 / 6 steg)
Steg 6: Hur detta fungerar?
Protokollet är mer än enkel trådlös kommunikation, den innehåller också ihopkoppling och liksom USB-meddelande några ansökan protokoll identifiering. Bluetooth har en UUID för varje protokoll, några väl kända och några upp till dig att genomföra. Jag använde seriella över Bluetooth enkelhet naturligtvis genomföra en helt ny. Sedan i Bluetooth som i USB finns begreppet värd och klient. Mottagande väntar samtal medan klienter genererar dem. För mig, det tog lite tid att lista ut och placeras telefonen i värd läge och tillbehör i klientläge. Tillbehöret är tänkt att drivas av ett nätaggregat kommer att försöka ansluta hela tiden, och telefonen vilket naturligtvis är batteridrivna kommer att göra den mindre ström tidskrävande uppgift väntar en Bluetooth-anslutning.
Nästa, Android...
Tja om du är en Arduino programmeraren detta kan se väldigt konstigt att du, men program i Android är inte monolitisk som i Arduino. Ett program är verkligen en samling kodfragment som blir avrättad i vissa villkor eller fall. Språk är naturligtvis Java, så som vore alltför olika. Låt mig ge er ett exempel: få information om batteriets status (hur mycket du har kvar, om det är full eller inte osv) finns det inget API-funktionen till kalla och avsöka den. Du registrera faktiskt en funktion/metod du skriver som anropas av systemet en gång något om ändringar av batteriet. Samma sak om missade samtal, du inte får den informationen från en fråga till ett API... du registrera en callback-funktion med systemet så att när det finns en förändring av samtal loggdatabasen på systemet, det också kommer att ringa din registrerade funktion. När din Android app. vill undersöka dessa loggar samtal eller SMS eller lyssna till batteri sändningar, måste du också lägga till behörigheter i din ansökan så att det kan göra. Annars ignorerar systemet tyst din begäran att meddelas eller att en lyssnare till dessa budskap.
Nästa, jag ville ha tillbehöret Autoanslut när telefonen är i spänna, göra att du måste ha något som fungerar i bakgrunden som jag inte förväntar mig att programmet är det aktiva programmet hela tiden. För att det är inte tillräckligt för att skriva en Android verksamhet, men du behöver ha en Android service också. Tjänsten blir avrättade av Android verksamhet som det börjar. Men om du vill visa saker på telefonskärmen... du behöver en verksamhet och inte en tjänst. OK, så service behov att berätta aktiviteten om vad det finns. Att göra att det skickar information i ett publicera-prenumerera mekanism som aktiviteten registrerats tidigare. Tjänsten är också del av koden som kommunicerar via Bluetooth med tillbehör. Detta är viktigt eftersom det inte är klokt att kalla spärrningen samtal (som nätverk eller trådlösa läsa och skriver) verksamhet. Aktivitet har det vara fullt redo att interagera med användaren.
Sist, jag ville ha telefonen kontrollera intensiteten i displayen. För att göra det den aktivitet som är en UI komponent, måste berätta tjänsten vad användaren beslutat intensiteten vara. En annan sak att registrera dig för... Men hur vet jag vad stödnivån som nu? Well, för att jag hade Arduino kod svar på fråga av telefonen, tjänsten kommer denna fråga på anslutning och uppdatera aktiviteten om den nuvarande intensitetsnivån. Låter det komplicerat? Inte riktigt men säkert jobbigt att genomföra.
För att få information om batteri, jag registrera en BroadcastReceiver och fann att det är att få kallas var 30 sekunder.
Det missa samtal som fungerar perfekt, men SMS informationen är lite knepigt. Det finns en anmälan om nya inkommande SMS, men ingen anmälan när användaren läser ett SMS. Så, jag röstningen SMS loggen varje gång jag får batteriet anmälan också. Det innebär att på inkommande SMS displayen kommer uppdateringen omedelbart att visa det är en, men när du läst SMS det kan ta upp till 30 sekunder för att visa att det finns inga olästa meddelanden som SMS längre. Detta är en godtagbar kompromiss för mig och om jag kommer att hitta ett bättre sätt, jag vill använda den.
Vänligen kala i åtanke att detta är faktiskt min första Android program. Det har varit ett bra tag sedan jag skrev någon Javakod också (mer än ett decennium). Jag gjorde aldrig något med Bluetooth heller... Koden kommit igång från befintliga Android sample code, främst i BluetoothChat exempel.