[Powered by Google Translate] [Seminar] [Android Apps (Nå med Jelly Beans!)] [Jordan Jóźwiak] [Harvard University] [Dette er CS50.] [CS50.TV] Hei alle sammen, og velkommen til Android-apper (Nå med Jelly Beans!) Seminar. Det kalles nå med Jelly Beans, selvfølgelig, fordi den nyeste versjonen av operativsystemet kalles Jelly Bean. Når jeg snakket om Android i fjor og gjorde dette i utgangspunktet samme seminar Jeg var å presentere design patterns og stilistiske valg for Gingerbread, selv om Ice Cream Sandwich hadde kommet ut på det tidspunktet, og dette er noe vi skal snakke om å gå litt forover. Android, selvfølgelig, har noen problemer med fragmentering, så den nyeste Google-operativsystemet er vanligvis egentlig ikke kommer til å bli vanlig blant brukerne for potensielt opp til et år, dessverre. Men ser bort fra det, vil vi snakke om mange grunner til at Android er mye bedre enn iOS. Ok, vi snakker om Android kontra iOS, noen design paradigmer, hvor du vil bli satt opp på bare ett lysbilde, og den store forskjellen mellom denne og i fjor er at jeg bare vil zoom gjennom noen konseptuelle ting å jobbe med operativsystemet og deretter gå inn i en virkelig grunnleggende eksempel. Faktisk bare et eksempel på at Google beskriver for å bygge din første app, og vi vil gå gjennom det sammen og bare beskrive. Jeg vet at mange av dere bare kodet i C, så Java er allerede kommer til å være et annet perspektiv, og på denne måten vil du få føttene våt og føler meg litt mer komfortabel med det forhåpentligvis. En rask oppsummering, Android versus iOS. I Android er det denne engangs utvikler avgift på $ 25, ingenting av dette $ 100 per år ting. Det er ingen restriksjoner, noe som betyr at hvis jeg ønsker å sende inn en app, Jeg bare sende det, og det er ingen godkjenningsprosess som det er for iOS. Du kommer til å utvikle seg med Java ved hjelp av Eclipse, som er cross platform, så det spiller ingen rolle om du har en Mac, Windows, eller noen Linux-maskin. Of course, med iOS må du bruke XCode på en Mac, og Android brukes av mange flere mennesker, så hvis du vil at app å ha noen form for synlighet eller kanskje gjøre litt penger fra annonser du er nok mer sannsynlig å dra nytte av Android. Og en ting som alltid har vært kjent om Android er den ekstreme mengden av tilpasning, mens iOS er svært fast i sine måter slik at de kan opprettholde sikkerhet og kontroll over hver lille aspekt av design innenfor deres OS og de enkelte apps. Android er veldig fri form, og det er så mange flere muligheter. Ok, noen design paradigmer. Legg merke til her akkurat som iOS har tabletter og iPhone og iPod rører de har til å støtte, sier, i likhet med et dusin enheter hvis du ønsker å støtte historiske ting i tillegg. Med Android har å støtte hundrevis av enheter, så er det noen ting som Google har prøvd å implementere å gjøre brukeren oppleve litt mer konsistent, men vi vil også snakke om hvordan dette betyr at det er problemer med fragmentering at du hele tiden må være klar til å støtte. Fragmentering betyr at det er mange forskjellige operativsystemer, mange ulike telefoner med forskjellig hardware som kjører Android alt på samme tid, så denne grafen går her tilbake i ca 6 måneder. Ja, seks måneder, og du kan se hvordan den mørkeste bandet på bunnen er Jelly Bean, som kom ut i løpet av sommeren, og du kan se akkurat nå trolig om lag 2% av telefonene har det. Ice Cream Sandwich kom ut over et år siden, og en fjerdedel av telefonene har det. Det er fortsatt mange telefoner som bruker OS-versjon fra år siden. En ting som Google har forsøkt å gjøre for å gjøre brukeropplevelsen mye mer konsekvent på tvers av apps er i ferd med Honeycomb, som er tabletten versjonen, deretter Ice Cream Sandwich og Jelly Bean, de egentlig prøver å understreke bruken av denne handlingen bar, som er det du kan se på toppen her, alt rett her, inkludert denne lille knappen Innstillinger. Det er design valg. Nå, når du ser de tre prikkene betyr det klikker på denne, og det vil være en drop-down menyen, som har en slags innstillinger. Dette viser bare opp fordi jeg klikket på denne knappen. Dette er noe som de prøver å bruke for å lage apps litt mer konsekvent over hele linja, og slik at brukeren har en bedre følelse av uniform opplevelse. Ok, så i tilfelle du ikke har gjort dette allerede, eller hvis du ser hjemme kan du følge disse trinnene for å konfigurere koding miljø. Det vil innebære å gå til nettsiden her. Du kan Google installere Android SDK og følge noen beskrivelser der. De forteller deg alt. De har du installere SDK, laste ned Eclipse Classic-versjonen, selv om, selvfølgelig, vi koding i Java. De anbefaler denne, og da denne ADT, Android Development Tools, er en plugin som du installerer i Eclipse som lar deg har en mye mer strømlinjeformet opplevelse med Android innen Eclipse. Det vil gi deg noen grafiske brukergrensesnitt for å utforme utsikten, og det vil gi deg mye mer støtte og muligheten til å starte med emulator og all den slags ting. Søknad rammeverk. Jeg vil snakke om hvordan prosjektene innenfor Android er strukturert, og så får vi gå inn i en rask eksempel, og forhåpentligvis du kan stille spørsmål når som helst og føler deg komfortabel ved slutten av det. Vi har noen sjargong først. En aktivitet er som skjermbildet du ser når du starter en app. Hele opplevelsen er selve aktiviteten, slik at du kan tenke på det som en skjerm eller en visning, men det er faktisk kildekoden side av det. Vi fortsatt kaller selve grensesnittet del av det en visning. Det er liksom som hvordan i PSett 7 hadde vi kontrolleren og deretter visningen. Aktiviteten er mer eller mindre kontrolleren, og utsikten er hva vi gjør i forhold til XML som er forbundet med den aktiviteten. Fragmenter er noe som er implementert i Ice Cream Sandwich fremover. Det er bare en idé om å ta deler av visningen eller aktiviteten og dele dem opp i separate områder, slik at vi kan gjøre våre koden mer brukbare for disse mange forskjellige enheter at vi må støtte, og det er bare en måte å forsøke å også faktor ut mer kode. Tjenestene er bakgrunnen ting som spiller musikk eller navigasjon retninger potensielt. Innholdsleverandører, disse er APIer i operativsystemet som lar deg få tilgang til felles data som for eksempel kontaktinformasjon, og deretter en hensikt er noe vi skal bruke når vi ønsker å lansere en ny aktivitet fra vår nåværende aktivitet. Hei Android, dette kommer til å bli et prosjekt som vi skal snakke om. Jeg skal faktisk gjøre det for deg, og så får vi gjøre en ting hvor vi klikker på en knapp med litt tekst og lansere en ny aktivitet. Veldig grei, men jeg ønsker å gå gjennom hva som vil gå inn i et prosjekt som dette. Når du gjør det nye prosjektet du vil se i løpet av Eclipse det er dette prosjektet som heter Hei Android. Så er det en hel haug med mapper her. De du virkelig er opptatt av er kilden mappen, ressursen mappen, res, og til en viss grad libs mappen for bibliotekene. Og bare så vi er på samme side med at Hvis du skulle lage et nytt prosjekt, du kan gjøre dette her, så hvis jeg vil kalle det HelloAndroid, og da hjelper det automatisk en hel haug av informasjon for oss. Pakken navnet er ment å være en unik identifikator som normalt vil være knyttet til nettstedet, hvis du hadde en. For eksempel vil jeg kalle dette net.cs50.helloandroid. Og jeg allerede har gjort dette prosjektet en gang. Ok, beklager. La oss kalle det HelloCS50. Og så vil det spørre ting som hva slags ikon vi ønsker å gjøre. Det er all grunn av Android Developer Tools grensesnitt, plugin som vi har lagt til Eclipse, så vi kan velge ting som hvilke ikoner som vi ønsker, og som ville gå inn i den dybde hvis vi vil. Men til slutt, bare sørg for prosjektet, og alt dukker opp her. Som jeg viste på den andre skjermen, vi har kilden mappen, og jeg vil snakke om hva alt dette betyr snart, men du kan se at straks det tar oss til HelloCS50 skjermen. Det er noen knapper over her for å legge til tekst og tekst-feltet oppsett. Det er liksom som Xcode, men dessverre ikke fullt så strømlinjeformet. Men klippene vil være din venn og ADT spesielt for å gjøre dette. Ok, er kilden mappen der Java-filene blir holdt, og dette er faktisk lanseringen av programmet. Det er i utgangspunktet som kontrollerne. Ressursen mappen eller res er der vi vil holde skjerm oppsett, bilder, lyd, tekst, animasjon og alt annet, libs, selvsagt, biblioteker. Og Manifest, er det slik at Android-systemet vet hvordan de skal samhandle med programmet ditt. Det forteller det om tillatelser og hvilke aktiviteter faktisk blir drevet. Det er all vesentlig informasjon som er nødvendig for å kjøre programmet. Kilden mappen er-hvis vi utvider det som du kan se her. Og et eksempel på at en kode ville se-dette er standard koden. Som vi kalte det, MainActivity. Som standard får vi onCreate, som er en funksjon som kalles når denne aktiviteten laster, slik at du ønsker å ringe onCreate (savedInstanceState). Dette vil gjenopprette noen biter av informasjon i tilfelle programmet ble satt på pause. Det er en hel aktivitet livssyklus diagram som du kan se på når du får litt mer i dybden i det, men det viktigste linje med kode det er denne setContentView funksjon som vil laste den ressursen filen for layout. Så hva onCreate her er i utgangspunktet gjør er det å si når jeg oppretter denne aktiviteten jeg ønsker å laste dette oppsettet. Og vi skal snakke om hva som oppsettet er i et sekund. Hvis vi skulle lansere det her det ser ut som dette, og som standard fordi vi har Eclipse gjør dette og ADT gjør det for oss dette er alt standardtekst kode som er skapt for oss, og vi kan gå videre og endre ting som vi liker. Ressursen mappe, som jeg sa, dette er hvor vi holder alle layouter, drawables i form av noe slag av bilder- de kalles drawables-og deretter lydfiler, menyer. Det er en måte en hel haug med XML i et fint sortert mote. Som du kan se, er det. HDPI, ldpi, mdpi og xhdpi mapper for drawables. Disse er forskjellige skjermstørrelser tettheter, så høy tetthet pixel per inch, lav tetthet, middels tetthet, ekstra høy tetthet. Dette er, igjen, så vi kan støtte alle disse forskjellige enheter, og ideelt sett, vil du ha forskjellige bilder for hver annen oppløsning. Oppsett er der vi inkluderer alle de forskjellige oppsett som skal brukes i ulike aktiviteter. De kan også omfatte oppsett for fragmenter, som betyr delvis aktiviteter i utgangspunktet. Hvis du ønsker å gjøre noe kult som når du roterer telefonen du vil den skal ha et annet oppsett du kan gjøre layout-landskapet som en annen mappe, og Android har automatisk en hel haug av disse reglene i arkivet, så det vil vite å se på ulike mapper basert på dagens oppsett av telefonen, hva slags maskinvare du bruker. Tilsvarende dette verdier-v11 her og verdier-v14 og standardverdiene mappe dette er for- vel, verdier av seg selv, vil dette være standardverdiene på tvers av alle versjoner av operativsystemet. På den annen side, v11 og v14 korresponderer med Honeycomb og Ice Cream Sandwich, henholdsvis. Igjen, dette er måter som-i disse mappene er forskjellige strenger og stiler, slik at du kan tilpasse utseendet på programmet ditt eller potensielt enda sin funksjonalitet, selv om det trolig ville være en dårlig idé, basert på versjonen av operativsystemet. Og jeg snakket om alt dette her. Igjen, teikneområdet, rå, layout, verdier. Standardinnstillingene, hvis vi går inn Hei Android eller Hei CS50 akkurat nå det vil se akkurat slik ut. Det vil si hei verden. Som du kan se her med Android tekst teksten for denne teksten visningen, som er i utgangspunktet bare en etikett, er hva vi vil kalle det i iOS. Den har denne morsomme notasjon @ string / hello_world. Dette er så vi kan-vi forsøke å trekke ut alle strengene, alle de hardkodet strenger i Android i en egen mappe, som tilfeldigvis er i values.strings. Hvis vi ser her, kan vi se at vi har en hardkodet streng lagret her for hello world, og det heter hello world, og dette er liksom en felles design beslutning på tvers av mange plattformer som du vil- strenger er den slags ting som vi ønsker å potensielt kunne endre. Vi ønsker ikke å kontrollere F i vår kildekoden filen i XML vår. Vi ønsker å kunne endre dette når vi får sjansen. Denne XML-filen, strings.xml, er en måte å utvinne hardkodet strenger som ellers ville være i våre layout ressurser eller i vår kildekoden. Manifest er der vi holder denne viktige informasjonen om programmet. Det inkluderer pakken navn. Det må være en unik identifikator. I motsetning til App Store for iOS navnene på programmene trenger ikke å være unik, og du kan faktisk endre navnet på programmet etter at du sender den, så hvis jeg starter med Angry Birds, og da jeg gjør en oppdatering, og jeg ønsker ikke å lansere en ny versjon Jeg tror jeg kan kalle det Angry Birds 2 mens jeg er på samme versjon syklus. Det ville bare dukke opp som en oppdatering. Det eneste som må være unik er denne pakken navn, som ikke mange mennesker vil se. Vel, du bare se om du ser på kildekoden eller hvis det er noen form for feil. Komponentene inkluderer aktiviteter, så må vi erklære noen form for aktivitet vi bruker. Dette er en tillatelse slags ting. Fordi Android ikke har denne strenge søknadsprosessen for innsending av apps i stedet de bare gjør alt basert off av tillatelser og erklære ting i Manifest. SDK versjon er også viktig. Vi kan sette bruk som SDK minimum versjon noe. Selvfølgelig vil du lage koden og design for de nyere operativsystemer. Kanskje ikke det nyeste, kanskje ikke Jelly Bean. Kanskje du ønsker å designe primært for Ice Cream Sandwich, selv om de er ganske mye det samme i form av design beslutninger og de faktiske biblioteker og APIer. Men i stedet har folk av den opprinnelige Android-versjonen-lignende Donut vei tilbake da- som fortsatt måtte bruke som forsøker å laste ned programmet og deretter si det fungerer ikke på telefonen min kan du sette minimum versjon og har det være Gingerbread eller Ice Cream Sandwich eller hva du føler deg komfortabel innsending. Og dette er et eksempel på Manifest. Vi kan se på den faktiske en i en bit. Ok, vi bare gå videre med demoen nå. Dette er demoen hvis du Google Android bygge din første app eller noe sånt. Vi vil gå gjennom alt som skjer der inne, og beklager, bare for en referanse som her vet Java i noen grad? Ok, så Java er ny kodespråket for folk flest kommer ut av CS50. Kort fortalt å gå over igjen hva det står her, hva vi ønsker å gjøre er stedet justere denne hello world program at alt den gjør er det lanseres og det sier hallo verden og det sier Hei CS50 på toppen fordi det er den aktiviteten navn vi kommer til å forsøke å gjøre et tekstfelt og en knapp slik at når vi trykker på denne knappen vil det ta teksten fra tekstfeltet og lansere en ny aktivitet, og det vil si uansett den tekst sagt i aktivitet, og dette er relativt enkel. Det er ikke veldig interessant. Du ville ikke ønsker å slippe noen app som dette. Men det demonstrerer noen viktige design-ting. Vi må samhandle med Manifest, med layout-filer, med kildekoden, og du kan se hvordan du starter en aktivitet fra en annen. Vi begynner med oppsettet for vår første aktivitet, som jeg vet det er litt lite, men som du kan se akkurat nå, er alt det er det har vår logo som vi skapte, aktiviteten navn, og det sier hallo verden i sentrum. I stedet, jeg først kommer til å gjøre dette til en lineær layout, en relativ layout, og disse er alle ting du kan slå opp og er verdt å gå over på et tidspunkt i forhold til oppsett. Det er mye som HTML. Vi sa det er egentlig ikke verdt å vite i form av en programmatisk forstand, men det er så mange forskjellige oppsett du kan kontrollere, og det er akkurat som CSS i form av stiler. Det er mye som skjer bare i form av estetikk her, og ja, det er verdt å lære, men det er den slags ting du bør se opp som du går og du føler at du trenger noe nytt. Jeg kan dra nytte av noen av de ADT verktøy her i hvert fall til å begynne med. Jeg skal lage et tekstfelt, og jeg vil gjøre en knapp. Legg dem rett ved siden av hverandre. De har allerede endre størrelsen på riktig måte. Sorry, igjen, kommer tilbake til forskjellen mellom lineær layout og relativ layout, en lineær utforming gir en litt mer funksjonalitet når det gjelder å fylle mellomrommet og å sørge Vi posisjonerer ting horisontalt eller vertikalt. Den store forskjellen mellom en lineær layout og en relativ layout er den relative layout posisjoner alt i forhold til andre visninger, og den gode tingen om det er at det tar kortere tid å tegne fordi operativsystemet ser på all koden og sier dette går i forhold til dette her, her. Det betyr at den gjør færre målinger enn en hel haug med nestede lineære oppsett, som jeg ville ha å gjøre hvis jeg ønsket at ting skal gå vertikalt her. Jeg har allerede noen ting går horisontalt, så jeg trenger en annen lineær layout å hekke dem vertikalt, men hvis jeg gjorde en relativ layout jeg kunne si holde dette mot venstre, dette til høyre, og dette nedenfor. Men fordi jeg vil at de skal fylle akkurat nå er jeg kommer til å bruke en lineær layout, og du kan se det allerede gjør mye av disse tingene for oss. Alle synspunkter må ha en eiendom av bredde og høyde, og dette skjer for å ha en vekt på 1, og dette har en vekt på 1 slik at det fyller hele rommet. Men bredden og høyden er viktigst. Denne ID-feltet her er ikke viktig innenfor selve layouten med mindre vi bruker en relativ layout og sier vi kan referere en vis stilling i referanse til en annen. Hvis vi hadde en relativ layout vi kunne si stilling dette under denne eller over denne ID, men dette ID vil være viktig når vi bruker det i koden vår, fordi vi kan referere disse individuelle visninger på denne måten. Og så kan du se koden requestFocus, som er noe du sannsynligvis så i PSett 7. Det var en autofokus tag eller noe langs disse linjene for ett av feltene. Og en ting, selvfølgelig, kan vi gjøre akkurat som i HTML, og legg merke til en av de fine tingene med ADT er at det autocompletes her. Kanskje ikke så pent som det gjorde i Xcode, men det gjør likevel, og vi kunne si hint og deretter gi den en slags streng liker skrive en melding, og hvis jeg gir det et øyeblikk, også legge merke til at jeg blir litt feil her sier at vi skal bruke en streng ressurs for dette, så hvis jeg lar deg gjøre det noe av det harde arbeidet for meg Jeg kan velge denne strengen, gjør refractor Android og ekstrakt Android streng. Jeg kan gi den det navnet, skriver en melding, og hva det gjorde er nå erstattet som hardkodet streng med en referanse til strengen i strengen. xml fil, noe som betyr at nå er dette her. Og jeg vet at det virker litt triviell og som ekstra arbeid på dette punktet, men når du har en hel haug av ting, en hel haug med strykere, det er veldig viktig, og spesielt for lokalisering fordi som jeg nevnte tidligere, er Android en svært globalt brukte operativsystemet at du bare kan gjøre verdier-en eller verdier-sp eller noe for engelsk eller spansk eller andre språk. Og så har du sannsynligvis ikke har hatt denne opplevelsen ennå siden vi ikke gjøre mye JavaScript i form av web-programmering, men vi kan også gjøre dette felt kalt onClick for tasten og dette er en måte å referere i layouten vår at vi ønsker en viss funksjon for å bli kalt inn vår kildekoden. Jeg kommer til å kalle dette SendMessage, og for å gjøre dette arbeidet det betyr i hovedaktiviteten her Jeg blir nødt til å lage en funksjon som er offentlig slik at den kan nås av oppsettet. Det er ugyldig fordi du bare ikke vil at den skal returnere noe. Vi kaller det SendMessage, og det tar en visning, som er en slags sammenheng at vi kan forankre denne metoden til at individuelle syn når vi kjører den. Og jeg vet ikke om du la merke-vel, ville du ikke har lagt merke til, men på dette punktet her dette synet er en type som ennå ikke er tatt med, og selvfølgelig, du vet alle fra CS50 om ikke inkludert typer. Det fine med IDE som Eclipse er at hvis du glemmer å inkludere en type det vil understreke med en liten rød snirklete og deretter gi deg muligheten til å importere utsikten. En rask måte å gjøre det er kontroll skift O, og det vil importere alle filene som det må. Nå som vi har denne funksjonen SendMessage, som kommer til å sende melding fra MainActivity til en ny aktivitet, vi er nødt til å bruke en intensjon om å lansere den nye aktiviteten fra denne, så vi vil sannsynligvis ønske å skape en global konstant eller også spesielt en offentlig konstant som vil hjelpe oss å vite hvordan vi kommer til å referere til strengen fordi når vi skaper en intensjon om vi ikke bare kalle en ny aktivitet, men vi kan også gi den en bunt av informasjon. En bunt er faktisk det uttrykket som Android bruker, og det er en måte å si gi den ekstra data, som det ikke kan være av en meget sofistikert datatype, men vi kan definitivt ta boolske eller strenger eller ints. Den slags ting. Føl deg fri til å spørre om noen av disse kvalifiseringskamper her, offentlig, endelig, statisk. Publikum er det viktigste. Det betyr at vi kan få tilgang til denne variabelen fra andre kildekoden filer for eksempel når vi oppretter en ny aktivitet. Vi kan referere til streng i denne filen. Hvis det er privat, betyr det at det er begrenset til denne personen fil her. Men vi vil kalle dette noe sånt som ekstra meldingen. Nå har vi gjort denne funksjonen, og hvis vi klikker på knappen, vil denne funksjonen bli kalt. Men vi har ikke gjort noe, selvsagt, med funksjonen. Hva vi ønsker å gjøre nå er å opprette en ny aktivitet, den aktiviteten som faktisk vil bli lansert. I Eclipse kan vi si nytt, Android aktivitet, blank aktivitet. Vi kan gi den et navn. La oss kalle det vår resultat aktivitet. Og så dette hierarkisk overordnede feltet er mulig å angi Slik virksomhet knyttet til hverandre. Fordi dette vil bli lansert fra annen aktivitet vi bør spesifisere at den har det overordnede hovedaktivitet. Og jeg kunne ha klikket på neste felt der, som ville ha fortalt oss noen valgfrie felt som det ble også inkludert, men det fine med ADT, igjen, er at hvis jeg ruller ned her i Manifest husk at alt dette virkelig ble inkludert som standard når vi opprinnelig opprettet prosjektet, og nå fordi vi brukte dette skape en ny aktivitet i stedet for bare legge vår egen klasse filen fordi vi gikk gjennom GUI deres for å gjøre dette det allerede lagt alt dette til Manifest for oss, noe som betyr bare at nå operativsystemet ikke vil klage når vi prøver å lansere denne aktiviteten. Og det kan også, selvfølgelig, ga det en etikett, som også viser seg i strenger. Det gjør en masse ting på baksiden slutten for oss. Uansett, nå som vi har dette resultatet aktivitet også, selve kildekoden filen i kilden mappen, og du kan se til kort berøre dette- fordi vi fortalte det om dette hierarkiske forelder det ga dette feltet android.r.ide.home i denne onOption valgte tingen. Hva dette er i utgangspunktet sier er det en menyknapp nå at i øvre venstre hjørne av skjermen hvis jeg går tilbake til PowerPoint der vi først snakket om handlingen bar på grunn av den hierarkiske forelder nå er det en liten pil tilbake hit og dette er klikkbare, slik at vi skal kunne-etter at vi faktisk kjøre dette programmet- gå tilbake, og det er en måte å spare oss en liten bit av koden der. Nå innenfor denne-vel, synes det å være klager på at for et øyeblikk. La oss kommentere det ut. Nå, for å faktisk samhandle med disse to aktivitetene, vi må lage en intensjonsavtale som omfatter alle disse dataene. I SendMessage nå jeg kommer til å cruise gjennom noen biter av kode og forklare det som jeg går. En hensikt, som jeg sa, er en måte å starte en aktivitet fra en annen. Hensikten er den typen. Vi skaper en variabel myIntent. Og dette er faktisk et objekt, det er derfor vi må ringe nytt. Det er vanlig Java bruk der, som kan ta en liten bit av å bli vant til. Dette betyr at vi bruker aktivitet eller klassen MainActivity, og hensikt på den måten tar aktiviteten det kommer fra og aktiviteten det kommer til, som vi kaller ResultActivity, og som er dens egen klasse. Inkludere den. Og da som jeg nevnte tidligere, ga vi at ID til endre tekstfeltet og teksten utsikt, så for å programmatisk fange teksten som finnes i RedigerTekst vi bruker denne funksjonen kalles findViewByID, som ligner på noe som du skal bruke når du prøver å få felt fra DOM. Kanskje David snakker om dette i foredraget. Men det er bare en måte å få dem-det er derfor vi merke disse tingene med disse feltene. Id.editText1. Det er allerede autocompleting for meg der. Og så får vi også inkludere-dette RedigerTekst nå som vi har feltet innenfor vårt program, gjorde alt som findViewByID var i utgangspunktet du kan tenke på det som gir oss en referanse til at RedigerTekst. Nå ønsker vi å få strengen eller meldingen innen den RedigerTekst som vi kan gjøre ved å bruke- du kunne tenke på EditText som en struct- vi kaller det et objekt i Java-med en hel haug med forskjellige metoder eller felt og attributter knyttet til den. Når jeg sier RedigerTekst. det gir meg sjansen til å få tilgang en metode som gettext, som vil få dagens tekst i at RedigerTekst og deretter konvertere som eksplisitt til en streng, og vi har lagret meldingen. Nå er vi faktisk ønsker å gjøre noe med det forsett vi skapte bare noen øyeblikk siden. Jeg vil sette ekstra som det heter i den hensikt, som, igjen, som jeg sa før, er dette en måte å skape bunten med en hel haug av data. Ekstra budskap er vår kode, slik at vi vet hva vi lagrer dette under, og da er jeg inkludert i meldingen. Og så kan vi faktisk starte aktivitet ved å gi den parameteren myIntent. Og dette faktisk vil starte aktivitet, så nå siden jeg oppgraderte til Windows 8 det kan være noen feil som dukker opp kort, men prøv å overse dem. Og dette er Android-emulatoren. Forhåpentligvis vil koden faktisk dukker opp i et øyeblikk. Igjen, ignorerer alle de små tingene. Men Android emulator du kan emulere en versjon av operativsystemet fra de tidligste de, Donut, Gingerbread. Dette er Jelly Bean 4.1. Men som du kan se akkurat nå, dette er noe vi har gjort. Dette har MainActivity, den RedigerTekst, knappen. Jeg kan skrive noe her, men hva er det vi mangler på dette punktet? Vi gjorde det feltet i MainActivity som kommer til å sende meldingen til den annen aktivitet, men på dette punktet vi har ikke gjort noe i den andre aktiviteten, så det kommer ikke til å få noe. La oss avslutte denne delen før vi går videre. Dette resultatet aktivitet, hva vi må gjøre er at vi må gjøre er at vi må- Vi kan også referere til intensjon i denne aktiviteten, så vi må fange hensikt, som er veldig enkel. Det er en funksjon inkludert i aktiviteten klassen, så vi kan bare si "Få meldingen fra intensjonen." "Intent myIntent = getIntent." Og dette vil gi oss, nå myIntent er et objekt, som er en referanse til den hensikt som førte oss til denne aktiviteten. MainActivity ringer og gir ekstra informasjon å resultere aktivitet. Resultatet aktivitet ser nå på den hensikt at det førte her, og vi kan få tilgang til meldingen som vi opprettet i den andre, getStringExtra, og dette vil autofullfør for meg. Og så husk, måten vi merket at litt av data var ved å gi den dette feltet akkurat her, denne offentlige streng, som er koden for strengen vi faktisk inkludert. Hvis jeg sier MainActivity.Extra_Message det er der, og dette er liksom som parameter navn når vi passerte kode fra kontrolleren til malen, når vi vil si tittelen pilen noe. Det er samme slags anelse om det. Nå husker dette. Vi hadde også denne bilen opprettet eller auto generert kode for resultatet aktivitet, som inkluderer teksten visningen i midten som sier hallo verden. Vi kan potensielt gjøre det større. La oss gjøre det først. Vi kan gjøre det 40 tetthet uavhengige piksler. La oss se, det er super enorme. Det vil være greit. Og da for å referere til denne personen tekst visning i koden vår vi må gi den en ID, og for å gjøre det vi sier @ + id, som betyr at vi tilordne den ID. Hvis vi bare sa @ id det vil anta vi refererer en ID som allerede eksisterer, og la oss kalle dette vår resultTextView. Og legg merke til at i XML er det ikke behov for semikolon eller noe. Alt er innen disse kodene. Det er veldig likt HTML i mange sanser. Det tar litt tid å venne seg til, men til slutt vil du føle deg ganske komfortabel med det. La oss oppdatere teksten for våre resultat tekstvisning, og som vi gjorde da vi får det edit tekstfeltet i vår annen aktivitet i MainActivity her vil vi også likeså- vi vil finne visning av ID. Og R, i tilfelle jeg ikke nevne dette før, er referansen til vår ressursene mappe, og deretter ID er en referanse til alt i ressursene mappen, alle IDer, og resultTextView. Og akkurat som før, er resultTextView et objekt, noe som betyr at den har alle disse egenskaper knyttet til den. Når vi bruker GetText for tekstredigering for dette tekstfeltet eller teksten visning vi faktisk kan bruke setText, og da har vi allerede funnet meldingen fra intensjonen, så jeg kan si melding, og dette vil faktisk sette meldingen. Det tar et øyeblikk å starte, og så kan vi se om det krasjer, men noen spørsmål om denne prosessen rett der, den slags samhandling? På mange måter er det ukomplisert. Grunnen til at jeg går gjennom noe relativt enkel er, igjen, fordi du får se samspillet mellom layout, kildekoden, hvordan du refererer til ting og kanskje få litt eksponering for hvordan Java jobber der. Hvis jeg faktisk skriver noe her, som ohai, og da jeg trykker på knappen, det lanseres en ny aktivitet, og at teksten view sier ohai. Det er veldig enkelt, men forhåpentligvis etter at eksemplet du liksom se hvordan dette samspillet fungerer, og nå som rot av filer på venstre side for alle disse prosjektmapper, håper du vet hvor du skal lete nå. Dette er din kildekoden området. Layout er egentlig det eneste du skal ta med til du inkludere bilder og drawables eller hva, og verdier, som vil inkludere strenger, som vi nevnte, og deretter stiler er noe som er liksom som CSS. Ta det opp når du vil, men inntil du føler deg komfortabel med å legge ekstra flair til søknaden din er det ingen grunn til å bekymre det for mye. Bare for å bryte opp en annen ting du vil definitivt ønsker å inkludere- forutsatt at du ønsker å integrere kule funksjoner og spare deg noen ekstra koding- ville være å inkludere 3. parts biblioteker. Her er den lille Android fyren med Sherlock Holmes hatten. Dette er en handling bar Sherlock bibliotek, som i utgangspunktet betyr at handlingen bar du så tidligere, som nå er standard i Ice Cream Sandwich og Jelly Bean, Hvis du ønsker å bringe den slags brukeropplevelsen for brukere på eldre versjoner og sparer deg fra å bekymre hvordan brukeren skal navigere på eldre versjoner når den tingen ikke er der du kan inkludere dette biblioteket og da er det bare å referansen-snarere enn standard Android biblioteker for handlingen bar, referere deg denne støtten biblioteket. Ting som Scoreloop, er det flott om du kommer til å inkludere et spill. Den lar deg legge leaderboards og prestasjoner til spill. AdMob er en måte å sette annonser i programmene i tilfelle du ønsker å gjøre litt penger på det. Selvfølgelig, det er Facebook og Twitter for å integrere det Hvis du ønsker å dele ting enkelt, et cetera. Dropbox, på samme måte, og Google Analytics er at diagrammet ser man det. Det vil være svært viktig hvis du faktisk ønsker å se hvem som er i samspill med din app eller hvem det er, hvordan de samhandler, et cetera. Google, som standard, forteller deg mye av statistikk om hvem som har installert appen og hva telefonene de har, hvilket operativsystem versjoner de har. Men hvis du ønsker å se hvem som bruker det på en daglig basis, og hvordan de bruker det så vil du ønsker å inkludere noen form for sporing system sånn. Når du er klar til å distribuere app Jeg trenger ikke å gå inn på det i for mye dybde. Klikk på linken her, Google Play. Det pleide å være Android Market. De omprofilert alt med Google Play, så nå du sender til det. Det er veldig grei. Du må inneholde en beskrivelse, noen skjermbilder. Som jeg sa, er det ingen godkjenningsprosess som iOS. Og hvor du skal dra herfra? Jeg viste deg en virkelig enkelt eksempel. Forhåpentligvis hvis det virker veldig enkelt så det er sannsynligvis et godt tegn. Hvis du i det hele tatt følte meg litt forvirret eller usikker på nøyaktig hva jeg var å skrive det er også fint, men herfra går til Google Guides. Dette er et flott sted å starte. Det vil snakke deg gjennom hva de kan forvente i form av søknaden design, hvordan brukerne normalt samhandle med det. Det er mye friere form enn iOS, vil jeg si, som det virker som tabellvisninger er-jeg vet ikke, det er deres brød og smør. Alt er en tabellvisning glir opp og ned. Med Android definitivt de oppfordrer folk til å se på det fra en hel haug med forskjellige perspektiver. Når du inkluderer software development kit i denne ADT som standard har du en hel haug med prøveprosjekter i Android. Akkurat her, Android, Android Eksempel Project. Hvis jeg klikker på det, så jeg kan velge en versjon som av prøven prosjektene gjelder. Det er en hel haug med forskjellige ting her. Det starter med action bar kompatibilitet, akselerometer lek, sikkerhetskopiering og gjenoppretting, Bluetooth, gest byggmester. Jetboy er et eksempel spill de gir deg, som er LunarLander. Det finnes en hel haug med eksempler på programmer her, og de er alle rettet mot ulike aspekter av Android API, og ideen er at når du gjør din søknad du trenger ikke å lære alt om Android for å gjøre en Android-app. Du trenger bare å lære om de delene som du faktisk kommer til å bruke. Se på disse sample biblioteker. Føl deg fri til å kopiere og lime inn koden og bruke den på nytt. Det er en stor ting å se på vanskeligere kode og prøve å forstå det, er som selvfølgelig hvorfor i CS50 vi ofte gi deg store mengder av kildekode. Se på noen av disse hvis du skal bruke lignende biblioteker og deretter bruke den til din egen kode. Og selvfølgelig, det er tutorials. Søke etter tutorials. Jeg fant en masse gode online som kan bringe deg opp til fart med det fragmenter egentlig er og hvordan du kan bruke dem. Noen av disse nye design-ting, som fragmenter, du egentlig ikke trenger å være bekymret med mindre du gjør en ganske stort i omfang prosjektet. De er ting som Google prøver å fase inn StackOverflow er selvfølgelig din venn. Forhåpentligvis jeg solgte deg litt på Android, realisere det er mye lettere å nærme seg i form av bare kodespråket. Java er jeg vil si mye lettere å forstå enn Objective-C. Android vokser jeg tror mye mer enn iOS. Jeg mener, er dataene der også, bortsett fra hva jeg tror. Det kommer til å være rundt en stund, og de er noen år bak i form av deres design sykluser, så det er liksom forståelig at de fremdeles arbeider gjennom noen av disse konsistens spørsmål, som denne handlingen bar er en ny ting for dem fortsatt, slags skape lignende brukeropplevelse på tvers av alle sine apps. Forhåpentligvis kan du gå fremover nå, og åpne opp Eclipse og lage dine egne Android-apps. Har noen noen spørsmål før vi bryte opp om noe? Jeg kan fortelle deg svaret er 42. Vel, glad koding alle, og lykke til. [CS50.TV]