Det er alltid gøy å sette Android eller Python programmeringsferdigheter på skjermen. For en stund tilbake skjønte jeg at det ville være kult å prøve å kontrollere min bærbare datamaskin via Android-mobilenheten min. Tenk på det: ekstern bærbar tilgang, inkludert å kunne spille av og sette musikk på pause, starte og stoppe programmering av jobber eller nedlastinger osv., Alt ved å sende meldinger fra telefonen. Ryddig, ikke sant?
Før du fortsetter å lese, må du huske på at dette er et kjæledyrprosjekt, som fortsatt er i en tidlig fase - men den grunnleggende plattformen er der. Ved å lime sammen noen vanlige verktøy, var jeg i stand til å sette opp Android-telefonen min for å kontrollere min bærbare datamaskin via en Python-tolk.
Forresten: prosjektet er åpen kildekode. Du kan sjekke ut klientkoden her og serverkoden her .
Dette prosjektet involverer følgende teknologier, hvorav noen du kanskje er kjent med, og noen av dem er ganske spesifikke for oppgaven:
På et høyt nivå anser vi Android-telefonen vår som klienten og den bærbare datamaskinen vår, serveren. Jeg vil gå gjennom denne fjerntilgangsarkitekturen grundig nedenfor, men den grunnleggende flyt av prosjektet er som følger:
Nå kan vi grave inn.
Så en god dag begynte jeg å se på Python-tolker som jeg kunne kjøre på Android-telefonen min (Droid 2, den gang). Like etter oppdaget jeg det utmerkede SL4A-pakke som brakte Python For Android liv. Det er en veldig fin pakke: du klikker på et par knapper og plutselig har du en nesten fullt funksjonelt Python-miljø på din mobile eller nettbrett som både kan kjøre din gode olje Python-kode og få tilgang til Android API (jeg sier nesten fordi noen ting sannsynligvis mangler og Android API ikke er 100% tilgjengelig, men for de fleste brukstilfeller er det tilstrekkelig).
Hvis du foretrekker det, kan du også bygge din egen Python-distribusjon for å kjøre på Android-enheten din, noe som har fordelen at du deretter kan kjøre hvilken som helst versjon av tolken du ønsker. Prosessen innebærer kryss-kompilering av Python som skal kjøres på VÆPNE (arkitekturen som brukes på Android-enheter og andre tabletter ). Det er ikke lett, men det er absolutt gjennomførbart. Hvis du er klar for utfordringen, sjekk her eller her .
Når du har tolkoppsettet ditt, kan du gjøre i utgangspunktet hva du vil ved å kombinere Python med Android API, inkludert å styre den bærbare datamaskinen eksternt. For eksempel kan du:
Vår prosjektsammensetning er som følger:
En applikasjon på klientsiden bygget på Twisted hvis du vil teste serverkoden (nedenfor) uten å måtte kjøre Django-applikasjonen i det hele tatt.
En Django-applikasjon på serversiden, som leser inn kommandoer fra Android-enheten og sender dem videre til Twisted. Som det ser ut, er Amarok den eneste bærbare applikasjonen som serveren kan samhandle med (dvs. for å kontrollere musikk), men det er et tilstrekkelig proof-of-concept, siden plattformen er lett utvidbar.
En serversiden Twisted 'forekomst' som kommuniserer med den bærbare datamaskinens mediaspiller via D-Bus, og sender kommandoer når de kommer inn fra Django (for øyeblikket støtter jeg 'neste', 'forrige', 'spill', 'pause', 'stopp' og 'demp'). Hvorfor ikke bare overføre kommandoene direkte fra Django til Amarok? Twisted's hendelsesdrevne, ikke-blokkerende attributter tar bort alt hardt arbeid med å tråde (mer nedenfor). Hvis du er interessert i å gifte deg med de to, se her .
Jeg har nevnt D-Bus flere ganger, så det er sannsynligvis verdt å diskutere det nærmere. I det store og hele er D-Bus et meldingsbussystem for å kommunisere mellom applikasjoner (f.eks. På en bærbar datamaskin og Android-telefon) enkelt gjennom spesiallagde meldinger.
Den består hovedsakelig av to busser: systembussen for hele systemet; og øktbussen, for userland-ting. Typiske meldinger til systembussen vil være 'Hei, jeg har lagt til en ny skriver, gi beskjed til D-Bus-aktiverte applikasjoner om at en ny skriver er online', mens typisk interprosesskommunikasjon (IPC) blant applikasjoner vil gå til økten buss.
Vi bruker øktbussen til å kommunisere med Amarok. Det er veldig sannsynlig at de fleste moderne applikasjoner (i det minste under Linux-miljøer) støtter denne typen meldinger, og generelt er alle kommandoer / funksjoner som de kan behandle, godt dokumentert. Ettersom alle applikasjoner med D-Bus-støtte kan kontrolleres under denne arkitekturen, er mulighetene nesten uendelige.
Mer info finner du her .
Etter å ha satt opp all infrastruktur, kan du fyre av Android-applikasjon og det vil inngå en uendelig løkke for å lese innkommende meldinger, behandle dem med noen fornuftige kontroller, og hvis de er gyldige, sende dem til en forhåndsdefinert URL (dvs. URL-en til Django-appen din), som i sin tur vil behandle inngangen og handle deretter. Android-klienten markerer deretter meldingen som lest og sløyfen fortsetter til en melding med det nøyaktige innholdet 'exitclient' (smart, ikke sant?) Behandles, i hvilket tilfelle klienten vil avslutte.
På serveren plukker Django-applikasjonen en kommando som skal behandles og sjekker om den starter med en gyldig instruksjon. I så fall kobles den til Twisted-serveren (ved hjelp av Telnetlib å koble til via telnet ) og sender kommandoen med. Til slutt analyserer Twisted inngangen, forvandler den til noe som passer for Amarok, og lar Amarok gjøre magien! Til slutt svarer den bærbare datamaskinen din ved å spille sanger, pause, hoppe over osv.
Når det gjelder den 'forhåndsdefinerte URL': hvis du vil kontrollere datamaskinen din langtfra, må dette være en offentlig URL (tilgjengelig via Internett). Vær oppmerksom på at koden for tiden ikke implementerer noe sikkerhetslag (SSL, osv.) - slike forbedringer er for øyeblikket øvelser for leseren.Alt ser veldig enkelt ut så langt, ikke sant? Du kan spørre deg selv: 'Kan dette utvides til å støtte smidig funksjon [X]?' Svaret er: Ja (sannsynligvis)! Gitt at du vet hvordan du skal samhandle med datamaskinen din ved å bruke telefonen riktig, kan du supplere koden på serversiden for å gjøre hva du vil. Før du vet ordet av det, skyter du av lange prosesser på datamaskinen din eksternt. Eller hvis du takler elektronikken, kan du bygge et grensesnitt mellom datamaskinen og favorittapparatet ditt, og kontrollere at via SMS-instruksjoner (“Make me coffee!” kommer til å tenke).
Jeg vil fortsette å leke med min Android-laptop-kontrollleke en stund, forbedre funksjonene, fikse feil osv. Men hvis du er interessert, vil jeg gjerne se deg hjelpe deg! Bare gaffel depotet og send eventuelle trekkforespørsler.
Hvis du har spørsmål, kan du skyte meg en e-post på [e-postbeskyttet] og jeg hjelper deg gjerne.