Video: Opplev fiskelykke med mobilteknologi | Telenor Norge 2024
Android driver mange av Googles innovative prosjekter. Ta for eksempel tablettapparatet kjent som Project Tango. Ved første øyekast ser en Project Tango-enhet ut som en vanlig syv-tommers tablett. Når du slår på enheten, ser du det kjente Android-startskjermbildet med ikoner for å starte programmer, og med indikatorer for WiFi-signal og batteristyrke.
Enheten kjører til og med Google Play Play-appen, slik at du kan bruke den til å bla gjennom nettet, redigere dokumenter og gjøre alt det andre vanlige nettbrettetheter gjør.
Men Project Tangos maskinvare er ikke vanlig. På baksiden av tabletten har du en dybdesensor, et fiskeøyekamera og et IR-kamera. Kombinere data fra disse kildene med den interne bevegelsessporingsmaskinen, oppretter Project Tango et 3D-kart over det omkringliggende rommet.
Du kan lage et kart over din egen stue og lagre kartet på en Project Tango-enhet. Når du tar enheten tilbake til stuen, husker enheten plassen og alle gjenstandene i rommet.
Tango kommer med noen få demo apps. Med en app, målretter du enheten på to punkter for å måle avstanden mellom disse punktene. Du kan stå flere meter fra start- og sluttpunktene fordi enheten vet hvor langt du er fra hvert av punktene.
Med en annen app går du gjennom virtuelle verdener. For å endre synspunktet i en verden, vri du ikke en joystick, flytt musen eller dra fingrene langs en skjerm. I stedet ser du enhetens skjerm når du beveger deg rundt i ditt eget virkelige miljø. Enheten viser deg hva du vil se i den virtuelle verden mens du går fremover, snu til å se sideveis, og navigere deg rundt virtuelle 3D-objekter.
For å komme i gang med å utvikle, kommer Project Tango med noen prøveapper. Å åpne den grunnleggende QuickStart-appen i Android Studio viser oversettelses- og rotasjonsverdier når du flytter enheten fra sted til sted. (Se følgende figur.)
QuickStart-appen.Kjernen i QuickStart-appen er en Android-aktivitet. Noen av appens kode vises nedenfor.
/ * * Copyright 2014 Google Inc. Alle rettigheter reservert. * * Lisensiert under Apache-lisensen, versjon 2. 0 ("lisensen"); * Du kan ikke bruke denne filen unntatt i samsvar med lisensen. * Du kan få en kopi av lisensen på * * // www. apache. org / lisenser / lisens-2. 0 * * Med mindre det er påkrevd av gjeldende lov eller avtalt skriftlig, distribueres programvare * distribuert under lisensen på en "AS IS" BASIS, * UTEN GARANTIER ELLER BETINGELSER AV NOEN SIN, enten uttrykkelig eller underforstått.* Se lisensen for det bestemte språket som styrer tillatelser og * begrensninger under lisensen. * / import com. Google. en kran. tangoservice. Tango; importere com. Google. en kran. tangoservice. Tango. OnTangoUpdateListener; importere com. Google. en kran. tangoservice. TangoConfig; importere com. Google. en kran. tangoservice. TangoCoordinateFramePair; importere com. Google. en kran. tangoservice. TangoPoseData; // Det er flere importdeklarasjoner her offentlig klasse MainActivity utvider Aktivitet {@Override protected void onCreate (Bundle savedInstanceState) {super. onCreate (savedInstanceState); setContentView (R. layout. activity_main); mTranslationTextView = (TextView) findViewById (R. id. translation_text_view); mRotationTextView = (TextView) findViewById (R. id. rotation_text_view); // Instantiate Tango klient mTango = ny Tango (dette); // Sett opp Tango-konfigurasjon for bevegelsessporing mConfig = mTango. getConfig (TangoConfig. CONFIG_TYPE_CURRENT); mConfig. putBoolean (TangoConfig. KEY_BOOLEAN_MOTIONTRACKING, true); @Override protected void onActivityResult (int requestCode, int resultCode, Intent data) {prøv {setTangoListeners ();} catch (TangoErrorException e) {} prøv {mTango. connect (mConfig);} fangst (TangoOutOfDateException e) {} fangst (TangoErrorException e) {}} private void setTangoListeners () {// Velg koordinatrammepar ArrayList framePairs = new ArrayList (); framePairs. legg til (ny TangoCoordinateFramePair (TangoPoseData. COORDINATE_FRAME_START_OF_SERVICE, TangoPoseData. COORDINATE_FRAME_DEVICE)); // Legg til en lytter for Tango pose data mTango. connectListener (framePairs, ny OnTangoUpdateListener () { @Override offentlig tomgang påPoseAvailable (TangoPoseData pose) { // Formatoversettelse og rotasjonsdata endelig String translationMsg = String. format (sTranslationFormat, pose. oversettelse [0], posere. oversettelse [1], utgjøre oversettelse [2]); siste strengrotasjonMsg = Stringformat (sRotationFormat, posere rotasjon [0], utgjør rotasjon [3]); // Vis data i TextViews runOnUiThread (Ny Runnable () { @Override offentlig tomgangsløp () { mTranslationTextView. setText (translationMsg); mRotationTextView } } } );}} Det du ser her, er ikke hele 210-linjen MainActivity klassen, men noen av klassens viktige høydepunkter er oppsummert. Se på MainActivity-klassen. Kjernen til aktivitetens kode er inne i den anonyme OnTangoUpdateListener-klassen med sin onPoseAvailable-metode.
I hverdagen er en
pose
slik du orienterer hodet ditt i forhold til omgivelsene dine. Og i Project Tango-terminologi er en pose den måten du orienterer enheten på i forhold til omgivelsene. En pose er beskrevet av syv tall, som oversettelsen og rotasjonsnummeret som du ser i foregående figur. Når enhetens maskinvare registrerer en ny posisjon, kaller programvaren onPoseAvailable-metoden. OnPoseAvailable-metoden må vise meldinger som Oversettelse: -2.6622, 3. 214773, 2. 824979 i aktivitetens tekstfelt. Men det er et problem. Android's threading-regler dikterer at ingen annen tråd enn hovedtråden kan oppdatere et programs brukergrensesnitt. I MainActivity-klassen kjører OnTangoUpdateListener-forekomsten i en tråd helt. Så kan instansens onPoseAvailable-metode ikke vise meldinger i aktivitetens tekstfelter ved å ringe direkte til mTranslationTextView. setText og mRotationTextView. setText metoder.
Men som professor Farnsworth i
Futurama
alltid sier, er det "Gode nyheter, alle! "Android har en runOnUiThread-metode for bare slike anledninger. RunOnUiThread-metoden er en klasse som implementerer Java's Runnable-grensesnitt. I QuickStart-appens kode viser denne klassens kjøremetode tekst på vegne av OnTangoUpdateListener-forekomsten. Til slutt ser enhetens bruker oversettelses- og rotasjonsdataene, og alt er bra.