vorig jaar foto 's in de androïde les, we beginnen in de oprichting van een androïde op de camera' s.Dit zal ons in staat stellen de controle en exploitatie van installaties voor de camera, en niet alleen de emissie van een voornemen van de standaard camera 's.Een les in een code en de camera zien.Nu zullen we het afvangen en opslaan van een foto, en de vaststelling van een lijst van, we zijn al te geven voor het gebruik van camera 's.De foto 's van opslag, moeten we ook de toevoeging van het toestaan van het gebruik van een extern, door het bewerken van AndroidManifest. XML -:,,,,,, < weerspiegelt.> < toestemming voor het gebruik van de naam "de androïde = androïde toestemming. Write_external_storage" />,, dan moeten we nog een "foto 's" knop, camera twee.Edit main.xml, met inbegrip van de knop:,, < de elementen...> < FrameLayout.../> < knopen Android:ID = "+ ID /button_photo" robot "foto 's": de tekst = androïde: layout_width = "wrap_content" Android:layout_height = "wrap_content" Android:layout_gravity = "het centrum" /> < /hiërarchie >,, (is het goed, strings.xml, SAVE tekst maar niet hier, het harde code.), het afvangen en opslaan van foto' s, als je de code, nu moet je een foto 's zien de knop; maar het is niets doen.We moeten het aan de opstelling van de code.Bovendien, setuplayout (), in de mycameraactivity:,, de knop capturebtn = (knop) findViewById (r.id.button_photo); capturebtn. Setonclicklistener (nieuwe horizon. Onclicklistener () {de leegte onclick (overzicht) {takephoto ();}});,,, takephoto () van de beeldweergave van camera 's bekijken, is: tot slot, de bescherming van de statische media_type_image = 0; particuliere nietig takephoto () {picturecallback picturecb = nieuwe picturecallback () {de leegte onpicturetaken (byte [...] gegevens, de camera' s) (document picfile = getoutputmediafile (media_type_image); als (picfile = = nul) (log. E (etikettering, "kan niet tot de media controleren documenten van opslag van de autoriteit;???????"); terugkeer;} {Fos = nieuwe poging een FileOutputStream (picfile); Fos. Schrijven (gegevens); ();} vangst (Fos. Filenotfoundexception e) {logboek. E (etikettering, "het dossier niet vinden:" + E getmessage () (); getstacktrace; e} vangst (ioexception e) {logboek. E (etikettering, I /o - dossier "fout" + E: getmessage ());}}}; e getstacktrace (); de camera 's. TakePicture (nul, nul, picturecb);}, meer in detail, laten we kijken.De androïde die picturecallback interface voor het verkrijgen van gegevens uit de beelden van de camera.Zie je, de meeste van de code, takephoto (), de oprichting van picturecallback.De laatste regel is een haak aan deze nieuwe camera 's via de call - back -, takepicture (), van camera' s van de ADI.Dus, als de gebruiker op de knop "gevangen", de wijze van gebruik, takepicture (), vertelde de camera een foto gemaakt en overdracht van gegevens aan picturecallback.,, in de picturecallback, krijgen we een dossier te schrijven, schrijf het op, en behandeling van de verschillende mogelijke fouten.Als je schrijft een van verschillende soorten aanvragen, kan je iets met deze foto van de gegevens, zoals de display of opgeslagen in de databank. Totaal verschillende) een specifieke dossiers, we moeten een aanvullende methoden:,, persoonlijke documenten getoutputmediafile (int) {dossiers. = nieuwe documenten (milieu. Getexternalstoragepublicdirectory (milieu, getpackagename. Directory_pictures) ()); als (!Voorst, richtl. Bestaat ()) {als.Voorst, richtl. Mkdirs () {logboek. E (etikettering, "niet voor het creëren van een gids voor de opslag van."); terug van nul;}} = nieuwe snaren ("niet yyymmdd_hhmmss" plaats. Het Verenigd Koninkrijk). Het formaat van de formulieren (nieuwe (')); als (type = = media_type_image) {is het nieuwe document (catalogus file.separator. Getpath () + + + + "tijd" img_ "ik");}} {} anders terug van nul;,, kan op de SD - kaart van de gids voor de opslag van twee keuzes:,,,, milieu. Getexternalstoragepublicdirectory (), het gebruik van openbare gids.Als de aanvraag wordt gelost, foto 's blijven.,,, achtergrond. Getexternalfilesdir (): het gebruik van een catalogus, eigendom is van toepassing.Als de aanvraag wordt gelost, foto 's zal worden geschrapt.,,, in de beslissing welke, je moet zorgvuldig rekening te houden met de verwachtingen van de gebruikers als je gedrag of wanneer zij het schrappen van uw aanvraag.In de meeste gevallen, kunnen de gebruikers dat per ongeluk worden foto 's teleurgesteld, maar dit zal afhangen van de toepassing voor je de details van de procedure, als het gebruik van openbare abonneelijsten.,, omdat het hier om zeker te zijn dat je voor het creëren van een subdirectory van opslag (hier, een mogelijke Einecs - naam is terug, getpackagename ()).Anders heb je er foto 's van de gebruikers veel vervuiling van hun wortels van de opslag.Zodra de keuze van catalogi en, indien nodig, creëren we een dossier; hier gebruik van datum /tijdstip, dat is vrij standaard.En we zijn hier alleen om het dossier van de media - formaat.Als je wilt kan je video, toe te voegen aan de code aan te pakken, en te behouden.Maar, alsjeblieft, de video is een zeer ingewikkelde beheer.Nu kan redden van een dossier (zoals je kunt zien, als je een dossier aan de procedures voor het beheer van de opslag - gids), maar je zal zien, als je de foto 's, een voorproefje zullen bevriezen.Je kan het opnieuw kunnen, bij de zaak, takephoto ():,, de camera. TakePicture (nul, nul, picturecb); de camera 's. Startpreview ();,, zelfs met deze lijn, hoewel de preview dossier worden opgeslagen.Is dat omdat als we de code, alles in één draad af.We kijken naar een canvas training, maar niet de draad zelf geschreven, AsyncTask te overhandigen, iets met een minimum aan code de achtergrond van de draad weg.Weet je nog, de androïde code (de draad: niet alleen met behulp van een achtergrond. Iets dat geen betrekking heeft op de gebruikersinterface.Hier, we houden alleen de foto 's in de achtergrond. We zien een gedetailleerde handleiding AsyncTask, maar hier is de code om het probleem op te lossen:,, particuliere nietig takephoto () {picturecallback picturecb = nieuwe picturecallback () {de leegte onpicturetaken (byte [...] gegevens, de camera' s) (Het nieuwe savephototask uitvoering () (CAM. Gegevens);. Startpreview ();}}; de camera 's. TakePicture (nul, nul, picturecb); uitbreiding van dergelijke savephototask} [...] AsyncTask < bytes, touw, touw > {- string doInBackground (byte [].Picfile = getoutputmediafile gegevens) (document (media_type_image); als (picfile = = nul) (log. E (etikettering, "fout het is de media; opslag van de autoriteit goed?"); terug van nul;}, photodata = gegevens [0] [0]; proberen {FileOutputStream Fos = nieuwe FileOutputStream (picfile); Fos. Schrijven (photodata); ();} vangst (Fos. Filenotfoundexception e) {logboek. E (etikettering, "het dossier niet vinden getmessage (" + E:)); e); getstacktrace (} vangst (ioexception e) {logboek. E (etikettering, "fout" + E /o Dossier: getmessage () (); getstacktrace; e} terug van nul;}}, alsjeblieft, je moet één array, photodata van de installatie, de gegevens, het dossier kan schrijven.Anders, het is dezelfde code alleen naar een aparte categorie en draad.Rennen, dan controleer je de foto 's van het beheer van de bestanden is opgeslagen.Veel beter, je kan dit van toepassing is, de camera 's hebben veel verschillende functies, bijvoorbeeld.In de handleiding verder in te nemen, zullen we rekening houden met de toename van de video en flash en andere camera 's, opties.