- androiden app udvikling: hvordan fanger video

i tidligere tutorials vi så skrive kode adgang til den indbyggede kamera, se skærmen, og redde et billede.mange androide anordning kameraer vil også fange video, men kodeksen til at forvalte dette behov for at være lidt mere kompliceret.,,,,, hvor ringe kamera i androide app udvikling, hvor ringe kamera i androide apps del 2: opsamling og lagring af billeder, oprettelse af mediarecorder, først åbne androidmanifest.xml, at tilføje lydoptagelse tilladelser til kameraet tilladelser, der er oprettet i de foregående tutorials:,, < åbenbart...> < anvender tilladelse androide: navn = "androide. tilladelse. kamera /> < anvender tilladelse androide: navn =" androide. tilladelse. write_external_storage "/> < anvender tilladelse androide: navn =" androide. tilladelse. record_audio "/> og det bruger træk androide: navn =" androide. hardware. kamera />, skriver vi en særskilt metode i mycameraactivity.java til video.det første skridt er at frigøre det kamera, og til at skabe en ny mediarecorder.vi har brug for denne metode til at returnere sandt /falsk, så når vi senere forsøger at optage det, kan vi se, at det hele er blevet nedsat med succes før registrering (og dermed undgå forskellige mulige fejl), private mediarecorder hr.; beskyttede boolean prepareforvideorecording() {kamera. unlock(); hr. = nye mediarecorder(); mr.setcamera (kamera);), der åbner op for kameraet er nødvendigt at give medierne proces adgang til kameraet.- hvis du tager stadig billeder, kameraet api - tager sig af alt dette automatisk til dig, du skal bekymre dig om det for video.), er vi nødt til at udvikle de forskellige aspekter af mediarecorder: kilde (både audio og video), profil, output - fil, og se udstilling:,, menig static /int media_type_video = 1; beskyttede boolean prepareforvideorecording() {kamera. unlock(); hr. = nye mediarecorder(); mr.setcamera (kamera); mr.setaudiosource (mediarecorder. audiosource. kamera); mr.setvideosource (mediarecorder. videosource. kamera); mr.setprofile (camcorderprofile. kom (camcorderprofile. quality_high)); mr.setoutputfile (getoutputmediafile (media_type_video). tostring()); mr.setpreviewdisplay (preview. getholder(). getsurface())), audiosource og videosource gør, hvad man kunne forvente.der er en masse muligheder til rådighed for audio (herunder voice_call og mic), men her bruger vi, kamera, (som svarer til kameraet, hvis de er tilgængelige, eller bruger de vigtigste mikrofon på anden måde).din eneste mulighed er for video kamera eller misligholdelse,.,,, setprofile(), er en genvej funktion (kun til rådighed siden api - 8), som giver dem mulighed for at fastsætte en flok af video - og kodning og format oplysninger på en gang.hvis du vil gøre det manuelt, enten ved at køre mod tidligere apis, eller fordi du vil have mere finkornet kontrol, her er nogle prøvetagningsledninger:,, mr.setoutputformat (mediarecorder. outputformat. misligholdelse) mr.setaudioencoder (mediarecorder. audioencoder. amr_nb); mr.setvideoencoder (mediarecorder. videoencoder. h264), tjek det mediarecorder api - docs for flere muligheder, og camcorderprofile api) for oplysninger om, hvad der er automatisk, hvis du bruger denne mulighed.,,, note for samsung telefoner:, der er et problem med nogle samsung, telefoner, hvilket betyder, at de har brug for nogle flere miljøer for at fungere korrekt.tjek lige det her stackoverflow tråd, og dette xda udviklere tråd for flere detaljer, ser man, at den opfordrer til, getoutputmediafile(), angiver en video - output filetype, som vores nuværende metode ikke klare.her er de ekstra kode til at forvalte:,, private fil getoutputmediafile (int) (//- register og et tidsstempel som før, hvis (type = media_type_image) {tilbage nye fil (dir. getpath() + file.separator + "img_" + timestamp + "jpg)} andre, hvis (type = = media_type_video) {tilbage nye fil (dir. getpath() + file.separator +" vid_ "+ timestamp +". 3gp ");} {tilbage, for ellers;), kan det være nødvendigt at ændre den fil - slutning, hvis du har angivet en anden kodning. endelig forvisningen er den samme smag, som vi der er oprettet før, vi kalder de passende metoder til at få overfladen, den anvender, så mediarecorder kan tale til overfladen.,, registrering, last ting at gøre, før registrering er at forberede mediarecorder:,, beskyttede boolean prepareforvideorecording() (//som ovennævnte prøve (hr. prepare();} fangst (illegalstateexception e) (log. e (rfid - "illegalstateexception ved udarbejdelsen af mediarecorder" + e. getmessage()); f. getstacktrace(); releasemediarecorder(); tilbage falske} fangst (ioexception e) (log. e (rfid - "ioexception ved udarbejdelsen af mediarecorder" + e. getmessage()); f. getstacktrace(); releasemediarecorder(); tilbage falske} tilbage.} private tomrum releasemediarecorder() (hvis (hr.!= null) (hr. reset(), mr. release(); hr. =); kamera. lock();}}, det er enkelt. vi ringer bare til api - er, prepare(), metode på vores mediarecorder og håndtere eventuelle undtagelser.bemærk, at det er vigtigt at frigive mediarecorder, og vende tilbage til falske, hvis der er nogen undtagelser.efter at nulstille og frigivelse af de mediarecorder, er vi også nødt til at relock kameraet, så app bibeholder kontrollen over det.(husk, at du har brug for at frigive kameraet på pause.vi har allerede behandlet dette i kodeksen i tidligere tutorials.), at optage det, vi bliver nødt til at tilføje en knap til forsmag... og sætte knap op og begynd registrering:,, private knap recordvideobutton; private boolean isrecording = falske private tomrum setuplayout() (//som i tidligere tutorials setupvideobutton();} private tomrum setupvideobutton() (knap recordvideobutton = (knap) findviewbyid (r.id.button_video); setupbutton (recordvideobutton "starter video"); recordvideobutton. setonclicklistener (ny mening. onclicklistener() (offentlige eller onclick (betragtning v) (hvis (isrecording) (hr. stop(); releasemediarecorder(); kamera. lock(); recordvideobutton. settext ("starter video"); isrecording = falske) andet (hvis (prepareforvideorecording()) (hr. start(); recordvideobutton. settext ("video"); isrecording = sandt.} andre (//noget er gået galt.- kamera releasemediarecorder(). skål. maketext (mycameraactivity.this, "undskyld. ikke kunne starte video", skål. length_long). show();}}}})}, vil du også nødt til at tilføje en knap til xml - (og du vil redigere xml - lidt for at forbedre udseendet af hele). denne kodeks er affattet således, at vi bruger samme knap til start og stop optagelsen.det betyder også, at de knap selv viser, om du er i øjeblikket registrering eller ikke, som er en praktisk måde at maksimere brugeroplysninger med minimal skærm, fast ejendom, anvendelse.hvis app allerede er registrering, når dosisknappen er trykket, brugeren ønsker at standse registrering.så stopper vi og frigive de mediarecorder, relock kameraet, ændre på den tekst, og at nulstille, isrecording,.,, hvis app ikke allerede er registrering, vi ønsker at optage det.hvis den fælde metode vender rigtigt (dvs. mediarecorder er med succes blevet udarbejdet), starter vi registrering, ændring på den tekst, og at nulstille, isrecording,.hvis mediarecorder er ikke parat, overlader vi det igen, og viser en skål besked, skal brugeren ved, at noget er gået galt, og konstaterer, at til forskel fra kameraet fotolagring med mediarecorder, passerer i filnavn til oplagring automatisk tager sig af at redde den video, du behøver ikke klare at redde det selv.men det er her, gem det til filnavn, du giver (se via en fil opdagelsesrejsende app), og hvis de ønsker at gøre noget andet med optagelser (som f.eks. viser, at det for brugeren eller tillade dem at redigere det. du får brug for at udvide din app yderligere at gøre.,, i flere tutorials, vil vi se på nogle af de valgfrie muligheder for kameraet, og hvordan man bruger dynamisk udformning for at tilbyde brugeren muligheder først, når de er til rådighed.

Android mediarecorder diagram