Android Kamera Tutorial

Dette er de følgende to måter, der du kan bruke kameraet i søknaden din

Ved hjelp av eksisterende android kameraprogrammet i vår søknad

Direkte hjelp Kamera API levert av android i vår søknad

Bruke eksisterende android kameraprogrammet i vår søknad

Du vil bruke MediaStore.ACTION_IMAGE_CAPTURE å lansere en eksisterende kameraprogrammet installert på telefonen. Syntaksen er gitt nedenfor
Intent hensikt = new Intent (android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

Bortsett fra de ovennevnte, er det andre tilgjengelige Intents levert av Media. De er oppført som følger
Sr.NoIntent type og description1 ACTION_IMAGE_CAPTURE_SECURE

Det returnerer bilde tatt fra kameraet, når enheten er sikret
2 ACTION_VIDEO_CAPTURE
< p> Det kaller den eksisterende video program i android å fange video
3 EXTRA_SCREEN_ORIENTATION

Det brukes til å angi orienteringen av skjermen til vertikal eller liggende
4 EXTRA_FULL_SCREEN

Det brukes til å kontrollere brukergrensesnittet til ViewImage
5 INTENT_ACTION_VIDEO_CAMERA

Denne metoden brukes for å starte kameraet i videomodus
6 EXTRA_SIZE_LIMIT

Det brukes til å angi størrelsen grense på video eller bildeopptak størrelse

Nå vil du bruke funksjonen startActivityForResult ()
å lansere denne aktiviteten og vente på resultatet . Syntaksen er gitt nedenfor
startActivityForResult (hensikt, 0)

Denne metoden har vært definert i aktivitet
klasse. Vi kaller det fra hovedaktiviteten. Det finnes metoder definert i aktivitetsklasse som gjør den samme jobben, men brukes når du ikke ringer fra aktiviteten, men fra et annet sted. De er listet opp nedenfor
Sr.NoActivity funksjon description1 startActivityForResult (Intent hensikt, int requestCode, Bundle alternativer)

Det starter en aktivitet, men kan ta ekstra bunt alternativer med det
2 startActivityFromChild (Activity barn, Intent hensikt, int requestCode)

Det starte aktiviteten når aktiviteten er barn av annen aktivitet
3 startActivityFromChild (Activity barn, Intent hensikt, int requestCode , Bundle alternativer)

Det fungerer samme som ovenfor, men det kan ta ekstra verdier i form av bunt med det
4 startActivityFromFragment (fragment fragment, Intent hensikt, int requestCode) Anmeldelser

Det lanserer aktivitet fra fragment du er for tiden inne
5 startActivityFromFragment (fragment fragment, Intent hensikt, int requestCode, Bundle alternativer)

Det lanserer ikke bare aktiviteten fra fragment, men kan ta ekstra verdier med det

Uansett hvilken funksjon du brukte til å starte aktiviteten, de alle returnere resultatet. Resultatet kan oppnås ved å overstyre funksjonen onActivityResult
.

Eksempel

Her er et eksempel som viser hvordan å lansere den eksisterende kameraprogrammet for å ta et bilde og vise den resultat i form av bitmap

For å eksperimentere med dette eksempelet, må du kjøre dette på en faktisk enhet på hvilket kamera er støttet.
StepsDescription1You vil bruke Android studio IDE å lage en Android-applikasjon og gi den navnet som kamera under et com.example.sairamkrishna.myapplication. Mens du oppretter dette prosjektet, må du Target SDK og kompilere med på den nyeste versjonen av Android SDK til å bruke høyere nivåer av APIs.2Modify src /MainActivity.java fil for å legge til hensikt kode for å starte aktivitet og resultat metode for å motta utgangen. 3Modify layout XML fil res /layout /activity_main.xml legge noen GUI-komponent hvis nødvendig. Her legger vi bare bildeVis og en textView.4Run søknaden og velge en som kjører Android-enhet, og installere programmet på den og verifisere resultatene.

Følgende er innholdet i den modifiserte hovedaktivitet filen src /MainActivity.java .
pakken com.example.sairamkrishna.myapplication, import android.bluetooth.BluetoothAdapter, import android.bluetooth.BluetoothDevice, import android.content.ClipData, import android.content.ClipboardManager; import android.content.DialogInterface; import android.content.Intent, import android.content.IntentFilter, import android.graphics.Bitmap, import android.os.BatteryManager, import android.support.v7.app.ActionBarActivity, import android.os.Bundle; import android. view.Menu, import android.view.MenuItem, import android.view.View, import android.widget.ArrayAdapter, import android.widget.Button, import android.widget.EditText, import android.widget.ImageView; import android.widget .ListView, import android.widget.TextView, import android.widget.Toast, import java.util.ArrayList, import java.util.Set; public class MainActivity strekker ActionBarActivity {Button b1, b2; Imageview iv; Override Beskyttet void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); b1 = (Button) findViewById (R.id.button); iv = (Imageview) findViewById (R.id.imageView); b1.setOnClickListener (ny View.OnClickListener () {Override public void onClick (Vis v) {Intent hensikt = new Intent (android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult (hensikt, 0);}}); } Beskyttet void onActivityResult (int requestCode, int resultCode, Intent data) {//TODO Auto-generert metode spire super.onActivityResult (requestCode, resultCode, data); . Bitmap bp = (Bitmap) data.getExtras () får ("data"); iv.setImageBitmap (bp); }Override Beskyttet void onDestroy () {super.onDestroy (); }Override Public boolean onCreateOptionsMenu (Meny menyen) {//Blås menyen; dette legger til elementer i handlingsfeltet hvis det er til stede. . getMenuInflater () blåse (R.menu.menu_main, menyen); return true; }Override Public boolean onOptionsItemSelected (MENUITEM element) {//Håndtak handlingen bar varen klikk her. Handlingsfeltet vil //automatisk håndtere klikker på Hjem /Opp-knappen, så lenge //som du angir en forelder aktivitet i AndroidManifest.xml. int id = item.getItemId (); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) {return true; } Returnere super.onOptionsItemSelected (element); }}

Etter vil være innholdet i res /layout /activity_main.xml fil

< RelativeLayout xmlns: android = "http://schemas.android.com/apk/res /Android "xmlns: verktøy =" http://schemas.android.com/tools "android: layout_width =" match_parent "android: layout_height =" match_parent "android: paddingLeft =" @ dimen /activity_horizontal_margin "android: paddingRight =" @ dimen /activity_horizontal_margin "android: paddingTop =" @ dimen /activity_vertical_margin "android: paddingBottom =" @ dimen /activity_vertical_margin "verktøy: kontekst =" MainActivity ">. < TextView android: text = "Camera Eksempel" android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: id = "+ id /textview" android: Tekststørrelse = "35dp" android: layout_alignParentTop = "true" android: layout_centerHorizontal = "true" /> < TextView android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: text = "Tutorials point" android: id = "+ id /textView" android: layout_below = "+ id /textview" android: layout_centerHorizontal = "true" android: textcolor = "# ff7aff24" android: Tekststørrelse = "35dp" /> < Imageview android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: id = "+ id /bildeVis" android: src = "@ teikne /abc" android: layout_below = "+ id /textView" android : layout_centerHorizontal = "true" /> < Button android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: text = "kamera" android: id = "+ id /knapp" android: layout_below = "+ id /bildeVis" android: layout_centerHorizontal = "true" android: layout_marginTop = "86dp" /> < /RelativeLayout >

Etter vil være innholdet i res /verdier /strings.xml
definere ett nye konstanter
< resources > < string name = "APP_NAME" > My Application < /string > < string name = "hello_world" > Hei, verden <! /string > < string name = "action_settings" > Innstillinger < /string > < /ressurser >

Følgende er innholdet mislighold av AndroidManifest.xml

<? xml version = " 1.0 "encoding =" utf-8 "> < manifest xmlns:? android =" http://schemas.android.com/apk/res/android "pakken =" com.example.camera "android: version =" 1 "android: versjon =" 1.0 "> < søknad android: allowBackup = "true" android: icon = "@ teikne /ic_launcher" android: label = "@ streng /APP_NAME" android: tema = "@ stil /AppTheme" > < aktivitet android: name = "com.example.sairamkrishna.myapplication.MainActivity" android: label = "@ streng /APP_NAME" > < intent-filter > < handling android: name = "android.intent.action.MAIN" /> < kategori android: name = "android.intent.category.LAUNCHER" /> < /intent-filter > < /aktivitets > < /søknad > < /manifest >

La oss prøve å kjøre programmet. Jeg antar at du har koblet den faktiske Android Mobile-enhet med datamaskinen. For å kjøre programmet fra android studio, åpne en av prosjektets aktivitets filer, og klikk Kjør ikonet fra verktøylinjen. Før du starter programmet, vil Android studio vise følgende vindu for å velge et alternativ hvor du vil kjøre Android-applikasjon

Velg den mobile enheten som et alternativ, og deretter sjekke den mobile enheten som vil vise følgende skjermbilde og minus.;

Nå bare trykke på knappen, og kameraet vil bli åpnet. Bare ta et bilde. Etter fangst det, vil to knapper som ber deg å forkaste den eller holde den

Bare trykk på tic-knappen og du vil bli brakt tilbake til søknaden din med bildet i stedet for android ikonet

Direkte hjelp Kamera API levert av android i vår søknad

Vi skal bruke kameraet API for å integrere kameraet i vår søknad

Først må du initialisere kameraet objektet med statiske metoden gir av api heter Camera.open
. Syntaksen er
Kamera objekt = null; objekt = Camera.open ();

Bortsett fra de ovennevnte funksjon, det er andre funksjoner som tilbys av Camera klassen det som er listet opp nedenfor
Sr.NoMethod & Description1 getCameraInfo (int cameraId, Camera.CameraInfo cameraInfo)

Det returnerer informasjon om et bestemt kamera
2 getNumberOfCameras ()

Den returnerer et heltall som definerer kameraer tilgjengelige på enheten
3 låsen ()

Den brukes til å låse kameraet, slik at ingen andre programmer kan få tilgang til det
4 frigjøring ()
< p> Den brukes til å åpne låsen på kameraet, slik at andre programmer kan få tilgang til det
5 open (int cameraId)

Den brukes til å åpne bestemt kamera når flere kameraer støttes
6 enableShutterSound (boolsk aktivert)

Den brukes til å aktivere /deaktivere standardlukkerlyden fra bildefotografering

Nå må lage en egen klasse og utvide den med SurfaceView og implementerer SurfaceHolder grensesnitt.

De to klasser som har vært benyttet har følgende formål
ClassDescription Kamera
Den brukes til å styre kameraet og ta bilder eller spille inn video fra kameraet SurfaceView
Denne klassen brukes til å presentere en levende kamera forhåndsvisning til brukeren.

Du må ringe forhåndsvisning metode for kameraet klasse å starte forhåndsvisning av kameraet til brukeren
public class ShowCamera strekker SurfaceView redskaper SurfaceHolder.Callback {private Kamera theCamera; public void surfaceCreated (SurfaceHolder holder) {theCamera.setPreviewDisplay (holder); theCamera.startPreview (); } Public void surfaceChanged (SurfaceHolder arg0, int arg1, int arg2, int arg3) {} public void surfaceDestroyed (SurfaceHolder arg0) {}}

Bortsett fra forhåndsvisnings det finnes andre alternativer i kameraet som kan stilles inn med den andre funksjonene som tilbys av kameraet API
Sr.NoMethod & Description1 startFaceDetection ()

Denne funksjonen starter ansiktsgjenkjenning i kameraet
2 stopFaceDetection ()

Den brukes til å stoppe ansiktsgjenkjenning som er aktivert som funksjonen over
3 startSmoothZoom (int verdi)

Det tar et heltall og zoome kameraet veldig greit til denne verdien
4 stopSmoothZoom ()

Den brukes til å stoppe zoom på kameraet
5 stopPreview ()

Den brukes til å stoppe forhåndsvisning av kameraet til brukeren
6 takePicture (Kamera .ShutterCallback lukker, Camera.PictureCallback rå, Camera.PictureCallback jpeg)

Den brukes til å aktivere /deaktivere standardlukkerlyden fra bildefotografering

Eksempel

Etter eksempel demonstrerer bruk av kameraet API i søknaden

For å eksperimentere med dette eksempelet, vil du trenge selve Mobile enheter utstyrt med nyeste Android OS, fordi kameraet ikke støttes av emulator
StepsDescription1You vil bruke Android studio IDE til lage en Android-applikasjon, og gi det et navn som kamera under en pakke com.example.sairamkrishna.myapplication;. Mens du oppretter dette prosjektet, må du Target SDK og kompilere med på den nyeste versjonen av Android SDK til å bruke høyere nivåer av APIs.2Modify src /MainActivity.java filen for å legge den aktuelle koden camera.3Modify layout XML fil res /layout /activity_main.xml legge noen GUI-komponent hvis nødvendig. Her legger vi bare FrameView og en knapp og en ImageView.4Modify AndroidManifest.xml som vist nedenfor for å legge de nødvendige tillatelsene for camera5Run programmet og velge en som kjører Android-enhet, og installere programmet på den og verifisere resultatene.

Etter er . innholdet i den modifiserte hovedaktivitet filen src /MainActivity.java
pakken com.example.sairamkrishna.myapplication, import android.app.Activity, import android.bluetooth.BluetoothAdapter; import android.bluetooth .BluetoothDevice, import android.content.ClipData, importere android.content.ClipboardManager, importere android.content.DialogInterface, importere android.content.Intent, import android.content.IntentFilter, import android.graphics.Bitmap; import android.hardware. kamera, import android.hardware.Camera.PictureCallback, import android.hardware.Camera.ShutterCallback, import android.os.BatteryManager, import android.support.v7.app.ActionBarActivity, import android.os.Bundle; import android.view. meny; import android.view.MenuItem, import android.view.SurfaceHolder, import android.view.SurfaceView, import android.view.View, import android.widget.ArrayAdapter, import android.widget.Button, import android.widget.EditText; import android.widget.ImageView, import android.widget.ListView, import android.widget.TextView, import java.io.FileNotFoundException, import java.io.FileOutputStream, import java.io.IOException, import java.util.ArrayList; import java.util.Set; public class MainActivity strekker aktivitet implementerer SurfaceHolder.Callback {Kamera kamera; SurfaceView SurfaceView; SurfaceHolder surfaceHolder; Camera.PictureCallback rawCallback; Camera.ShutterCallback shutterCallback; Camera.PictureCallback jpegCallback; Override Beskyttet void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); SurfaceView = (SurfaceView) findViewById (R.id.surfaceView); surfaceHolder = surfaceView.getHolder (); surfaceHolder.addCallback (denne); surfaceHolder.setType (SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); jpegCallback = new PictureCallback () {Override public void onPictureTaken (byte [] data, kamera kamera) {Fileoutputstream outStream = null; try {outStream = new Fileoutputstream (String.format ("/sdcard /% d.jpg", System.currentTimeMillis ())); outStream.write (data); outStream.close (); } Catch (FileNotFoundException e) {e.printStackTrace (); } Catch (IOException e) {e.printStackTrace (); } Finally {} Toast.makeText (getApplicationContext (), "Picture Saved", Toast.LENGTH_LONG) .vis (); refreshCamera (); }}; } Public void captureImage (Vis v) kaster IOException {camera.takePicture (null, null, jpegCallback); } Public void refreshCamera () {if (surfaceHolder.getSurface () == null) {return; } Try {camera.stopPreview (); } Catch (Exception e) {} try {camera.setPreviewDisplay (surfaceHolder); camera.startPreview (); } Catch (Exception e) {}}Override beskyttet void onDestroy () {super.onDestroy (); }Override Public boolean onCreateOptionsMenu (Meny menyen) {//Blås menyen; dette legger til elementer i handlingsfeltet hvis det er til stede. . getMenuInflater () blåse (R.menu.menu_main, menyen); return true; }Override Public boolean onOptionsItemSelected (MENUITEM element) {//Håndtak handlingen bar varen klikk her. Handlingsfeltet //automatisk håndtere klikk på start /Opp-knappen, så lenge //som du angir en forelder aktivitet i AndroidManifest.xml. int id = item.getItemId (); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) {return true; } Returnere super.onOptionsItemSelected (element); }Override Public void surfaceCreated (SurfaceHolder holder) {try {kamera = Camera.open (); } Catch (RuntimeException e) {System.err.println (e); komme tilbake; } Camera.Parameters param; param = camera.getParameters (); param.setPreviewSize (352, 288); camera.setParameters (param); try {camera.setPreviewDisplay (surfaceHolder); camera.startPreview (); } Catch (Exception e) {System.err.println (e); komme tilbake; }}Override Public void surfaceChanged (SurfaceHolder holder, int format, int bredde, int høyde) {refreshCamera (); }Override Public void surfaceDestroyed (SurfaceHolder holder) {camera.stopPreview (); camera.release (); kamera = null; }}

Endre innholdet i res /layout /activity_main.xml
< RelativeLayout xmlns: android = "http://schemas.android.com/apk/res/android" xmlns: verktøy = "http://schemas.android.com/tools" android: layout_width = "match_parent" android: layout_height = "match_parent" android: paddingLeft = "@ dimen /activity_horizontal_margin" android: paddingRight = "@ dimen /activity_horizontal_margin . "android: paddingTop =" @ dimen /activity_vertical_margin "android: paddingBottom =" @ dimen /activity_vertical_margin "verktøy: kontekst =" MainActivity "> < TextView android: text = "Camera Eksempel" android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: id = "+ id /textview" android: Tekststørrelse = "35dp" android: layout_alignParentTop = "true" android: layout_centerHorizontal = "true" /> < TextView android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: text = "Tutorials point" android: id = "+ id /textView" android: layout_below = "+ id /textview" android: layout_centerHorizontal = "true" android: textcolor = "# ff7aff24" android: Tekststørrelse = "35dp" /> < SurfaceView android: id = "+ id /SurfaceView" android: layout_width = "match_parent" android: layout_height = "0DP" android: layout_weight = "1" /> < /RelativeLayout >

Endre innholdet i res /verdier /string.xml
< resources > < string name = "APP_NAME" > My Application < /string > < string name = "hello_world" > Hei, verden <! /string > < string name = "action_settings" > Innstillinger < /string > < /ressurser >

Endre innholdet i AndroidManifest.xml Hotell og legge de nødvendige tillatelser som vist nedenfor
<.; xml version = "1.0" encoding = "utf-8" > < manifest xmlns:? android = "http://schemas.android.com/apk/res/android" pakken = "com.example.camera1 "android: version =" 1 "android: versjon =" 1.0 "> < bruker-tillatelse android: name = "android.permission.CAMERA" /> < bruker-tillatelse android: name = "android.permission.ACCESS_NETWORK_STATE" /> < bruker-feature android: name = "android.hardware.camera" /> < bruker-feature android: name = "android.hardware.camera.autofocus" /> < søknad android: allowBackup = "true" android: icon = "@ teikne /ic_launcher" android: label = "@ streng /APP_NAME" android: tema = "@ stil /AppTheme" > < aktivitet android: name = "com.example.sairamkrishna.myapplication.MainActivity" android: label = "@ streng /APP_NAME" > < intent-filter > < handling android: name = "android.intent.action.MAIN" /> < kategori android: name = "android.intent.category.LAUNCHER" /> < /intent-filter > < /aktivitets > < /søknad > < /manifest >

La oss prøve å kjøre programmet. Jeg antar at du har koblet den faktiske Android Mobile-enhet med datamaskinen. For å kjøre programmet fra Android studio, åpne en av prosjektets aktivitets filer, og klikk Kjør ikonet fra verktøylinjen. Før du starter programmet, vil Android studio vise følgende vindu for å velge et alternativ hvor du vil kjøre Android-applikasjon

Velg den mobile enheten som et alternativ, og deretter sjekke den mobile enheten som vil vise følgende skjermbilde:.

Over bildet viser kameraoverflaten syn på layout.