Escolar Documentos
Profissional Documentos
Cultura Documentos
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
OFERTA
RELMPAGO
DELL
Inspiron 14 Srie 3000 com HD500, Frete Grtis e Intel Core. Veja!
Consideraes
Antes de permitir que sua aplicao use a cmera do dispositivo Android, voc
deve considerar algumas poucas questes sobre como seu aplicativo pretende
usar esse recurso de hardware.
Obrigatoriedade da Cmera O uso da cmera importante o bastante para
sua aplicao de forma que voc no queira permitir que ela seja instalada
em dispositivos que no possuam cmera? Em caso positivo, voc deve
declarar a obrigatoriedade da cmera em seu manifesto.
Imagem rpida ou cmera personalizada Como a sua aplicao usar a
cmera? Voc est interessado apenas em obter uma imagem ou vdeo de
forma rpida ou sua aplicao fornecer uma nova forma de usar a cmera?
Para obter uma imagem ou vdeo de forma rpida, considere os
http://www.klebermota.eti.br/2012/08/23/usandoacameranoandroidtraducaodadocumentacaooficial/
1/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
O bsico
O framework do Android suporta a captura de imagens e vdeos atravs da
API Camera ou do Intent da cmera. Abaixo seguem as classes relevantes:
Camera
Essa classe a API primria para controlar a cmera do dispositivo. Essa classe
usada para tirar fotos e vdeos quando se est construindo uma aplicao de
cmera.
SurfaceView
Essa classe usada para apresentar a pr-visualizao da cmera ao usurio.
MediaRecorder
Essa classe usada para gravar vdeo a partir da cmera.
Intent
Um intent do
tipo MediaStore.ACTION_IMAGE_CAPTURE ou MediaStore.ACTION_VIDEO_CAPTURE pode
ser usado para capturar imagens e vdeos sem usar diretamente o objeto Camera.
Declaraes no Manifesto
http://www.klebermota.eti.br/2012/08/23/usandoacameranoandroidtraducaodadocumentacaooficial/
2/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
Nota: Se voc estiver usando a cmera via intent, no precisa dessa permisso.
Recursos da Cmera Sua aplicao precisa declarar o uso do recursos da
cmera, por exemplo:
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera"
android:required="false" />
Permisses para gravao de udio Para gravar udio junto com o vdeo
http://www.klebermota.eti.br/2012/08/23/usandoacameranoandroidtraducaodadocumentacaooficial/
3/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
4/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
5/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
// create a file
// set the image
http://www.klebermota.eti.br/2012/08/23/usandoacameranoandroidtraducaodadocumentacaooficial/
6/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
7/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
Uma vez que a sua Activity receba o resultado com sucesso, a imagem ou vdeo
capturado estar disponvel no local especificado para acesso pela sua aplicao.
8/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
ela.
Cuidado: Lembre de liberar o objeto Camera pela chamada
Camera.release() quando sua aplicao tiver finalizado o uso da cmera. Se sua
aplicao no liberar a cmera adequadamente, todas as tentativas subsequentes
de acesso a cmera, incluindo os da sua prpria aplicao, iro falhar e podem
fazer com que tanto sua aplicao quanto as outras fechem.
Dispositivos Android podem ter mltiplas cmeras, por exemplo, uma cmera na
parte de trs para fotografia e uma cmera frontal para videochamadas. O
Android 2.3 (API Level 9) e superiores permitem que voc verifiquem o nmero
de cmeras disponveis em um dispositivo usando o
mtodo Camera.getNumberOfCameras().
Acessando a cmera
Se voc determinar que o dispositivo onde sua aplicao est sendo executada
possui uma cmera, voc precisa solicitar acesso a ela pela obteno de uma
instncia de Camera (a menos que esteja usando um intent de acesso a cmera).
Para acessar a cmera primria, use o mtodo Camera.open() e certifique-se de
http://www.klebermota.eti.br/2012/08/23/usandoacameranoandroidtraducaodadocumentacaooficial/
9/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
klebermota.eti.br
Blogsobrecincia,computaoeprojetosrelacionados
10/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
criao e destruio do view, que necessrio para atribuir a entrada da prvisualizao da cmera.
11/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
12/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
android:id="@+id/camera_preview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
/>
<Button
android:id="@+id/button_capture"
android:text="Capture"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
/>
</LinearLayout>
<activity android:name=".CameraActivity"
android:label="@string/app_name"
android:screenOrientation="landscape">
<!-- configure this activity to use landscape orientation -->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
13/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
anterior.
Capturando imagens
Uma vez que voc tenha criado uma classe de pr-visualizao e um layout para
exibi-la, voc est pronto para iniciar a captura de imagens em sua aplicao. No
cdigo de sua aplicao, voc precisa configurar ouvintes para os controles da
interface para responder s aes do usurio ao tirar uma foto.
De modo a recuperar uma imagem, use o mtodo Camera.takePicture(). Esse
mtodo usa trs parmetros qu recebem dados da cmera. Para que os dados
sejam recebidos em formato JPEG, voc precisa implementar a
interface Camera.PictureCallback para receber os dados da imagem e receber
esses dados em um arquivo. O cdigo a seguir mostra uma implementao bsica
da interface Camera.PictureCallback para salvar uma imagem recebida da
cmera.
http://www.klebermota.eti.br/2012/08/23/usandoacameranoandroidtraducaodadocumentacaooficial/
14/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
@Override
public void onPictureTaken(byte[] data, Camera camera) {
File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE);
if (pictureFile == null){
Log.d(TAG, "Error creating media file, check storage
permissions: " +
e.getMessage());
return;
}
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
fos.write(data);
fos.close();
} catch (FileNotFoundException e) {
Log.d(TAG, "File not found: " + e.getMessage());
} catch (IOException e) {
Log.d(TAG, "Error accessing file: " + e.getMessage());
}
}
};
Capturando vdeos
Captura de vdeos usando o framework do Android necessita de um
http://www.klebermota.eti.br/2012/08/23/usandoacameranoandroidtraducaodadocumentacaooficial/
15/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
16/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
17/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
Configurando o MediaRecorder
Quando estiver usando a classe MediaRecorder para gravar vdeo, voc precisa
executar os passos da configurao em uma ordem especfica e depois chamar o
mtodo MediaRecorder.prepare() para verificar e implementar a configurao. O
exemplo de cdigo a seguir demonstra como configurar e preparar de forma
adequada a classe MediaRecorder para gravao de vdeo.
18/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
return true;
}
19/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
MediaRecorder
// inform the user that recording has stopped
setCaptureButtonText("Capture");
isRecording = false;
} else {
// initialize video camera
if (prepareVideoRecorder()) {
// Camera is available and unlocked, MediaRecorder is
prepared,
// now you can start recording
mMediaRecorder.start();
// inform the user that recording has started
setCaptureButtonText("Stop");
isRecording = true;
} else {
// prepare didn't work, release the camera
releaseMediaRecorder();
// inform user
}
}
}
}
);
Liberando a cmera
Cmeras so recursos que so compartilhados por vrias aplicaes instaladas
no dispositivo. Sua aplicao pode fazer uso da cmera aps obter uma instncia
de Camera, e voc precisa ser particularmente cuidadoso quando a sua aplicao
termina de usa-la, e assim que a aplicao seja pausada (Activity.onPause()). Se
a sua aplicao no liberar de forma adequada a cmera, todas a tentativas de
acesso subsequentes a cmera, incluindo aquelas vindas de sua prpria
aplicao, iro falhar e podem causar o enceramento da aplicao.
Para liberar uma instncia do objeto Camera, use o mtodo Camera.release(),
como mostrado no exemplo a seguir.
http://www.klebermota.eti.br/2012/08/23/usandoacameranoandroidtraducaodadocumentacaooficial/
20/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
Salvando os arquivos
Arquivos de mdia criados pelos usurios como fotos e vdeos devem ser salvos
em um diretrio do armazenamento externo do dispositivo (Carto SD) para
preservar o espao do sistema e permitir que os usurios possam acessar esses
arquivos sem o dispositivo. Existem muitos diretrios em que os arquivos podem
ser armazenados, porm existem apenas dois locais padro que voc deveria
considerar:
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURE
S) Esse mtodo retorna o local padro, compartilhado e recomendado para
salvar fotos e vdeos. Esse diretrio pblico, de forma que outras aplicaes
http://www.klebermota.eti.br/2012/08/23/usandoacameranoandroidtraducaodadocumentacaooficial/
21/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
22/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
File mediaFile;
if (type == MEDIA_TYPE_IMAGE){
mediaFile = new File(mediaStorageDir.getPath() + File.separator +
"IMG_"+ timeStamp + ".jpg");
} else if(type == MEDIA_TYPE_VIDEO) {
mediaFile = new File(mediaStorageDir.getPath() + File.separator +
"VID_"+ timeStamp + ".mp4");
} else {
return null;
}
return mediaFile;
}
Recursos de cmera
O Android suporta uma gama ampla de recursos de cmera que voc pode
controlar com a sua aplicao, como formato da imagem, modo de flash, ajustes
de foco, e muito mais. Essa seo lista os recursos de cmera comuns, e discute
brevemente como usar cada um. Muitos dos recursos de cmera podem ser
acessados e configurados atravs do objeto Camera.Parameters. Porm, existem
diversos recursos importantes que necessitam do que ajustes simples
no Camera.Parameters. Esses recursos so cobertos nas seguintes sees:
Medio e foco de certas reas
Deteco de rostos
Timelapse
Tabela 1. Recursos de cmera comuns ordenados pela Nvel de API do Android
onde eles foram introduzidos.
Recursos
API Level
Descrio
Face Detection
14
http://www.klebermota.eti.br/2012/08/23/usandoacameranoandroidtraducaodadocumentacaooficial/
23/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
Metering Areas
14
Focus Areas
14
14
Exposure Lock
14
Video Snapshot
14
11
Multiple Cameras
Focus Distance
Reports distances
between the camera and
objects that appear to be
in focus
Zoom
Exposure Compensation
GPS Data
Include or omit
geographic location data
with the image
White Balance
http://www.klebermota.eti.br/2012/08/23/usandoacameranoandroidtraducaodadocumentacaooficial/
24/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
captured image
Focus Mode
Scene Mode
JPEG Quality
Flash Mode
Color Effects
Anti-Banding
Picture Format
Picture Size
25/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
Voc pode usar a tcnica mostrada acima para outros recursos de cmera. O
objeto Camera.Parameters fornece um mtodo getSupported...
(), is...Supported() ou getMax...() para determinar se (e em que nvel) um
recurso suportado.
Se a sua aplicao precisar de um determinado recurso de cmera para
funcionar corretamente, voc pode requerer esses recursos atravs do
manifesto. Quando voc declara o uso de recursos especficos da cmera, como
flash ou auto-foco, o Google Play restringe a instalao de sua aplicao em
dispositivos que no suportem esses recursos. Para obter uma lista de recursos
que podem ser declarados no seu manifesto, veja Features Reference.
http://www.klebermota.eti.br/2012/08/23/usandoacameranoandroidtraducaodadocumentacaooficial/
26/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
27/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
supported
List<Camera.Area> meteringAreas = new ArrayList<Camera.Area>();
Rect areaRect1 = new Rect(-100, -100, 100, 100);
// specify an
in center of image
meteringAreas.add(new Camera.Area(areaRect1, 600)); // set weight
60%
Rect areaRect2 = new Rect(800, -1000, 1000, -800); // specify an
in upper right of image
meteringAreas.add(new Camera.Area(areaRect2, 400)); // set weight
40%
params.setMeteringAreas(meteringAreas);
}
area
to
area
to
mCamera.setParameters(params);
The Camera.Area object contains two data parameters: A Rect object for specifying
an area within the cameras field of view and a weight value, which tells the
camera what level of importance this area should be given in light metering or
focus calculations.
The Rect field in a Camera.Area object describes a rectangular shape mapped on a
2000 x 2000 unit grid. The coordinates -1000, -1000 represent the top, left corner
of the camera image, and coordinates 1000, 1000 represent the bottom, right
corner of the camera image, as shown in the illustration below.
Figure1.TheredlinesillustratethecoordinatesystemforspecifyingaCamera.Area
withinacamerapreview.Theblueboxshowsthelocationandshapeofancameraarea
withtheRectvalues333,333,667,667.
The bounds of this coordinate system always correspond to the outer edge of the
image visible in the camera preview and do not shrink or expand with the zoom
http://www.klebermota.eti.br/2012/08/23/usandoacameranoandroidtraducaodadocumentacaooficial/
28/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
Deteco de rostos
For pictures that include people, faces are usually the most important part of the
picture, and should be used for determining both focus and white balance when
capturing an image. The Android 4.0 (API Level 14) framework provides APIs for
identifying faces and calculating picture settings using face recognition
technology.
Nota: While the face detection feature is
running, setWhiteBalance(String), setFocusAreas(List)and setMeteringAreas(List
) have no effect.
Using the face detection feature in your camera application requires a few
general steps:
Check that face detection is supported on the device
Create a face detection listener
Add the face detection listener to your camera object
Start face detection after preview (and after every preview restart)
The face detection feature is not supported on all devices. You can check that this
feature is supported by calling getMaxNumDetectedFaces(). An example of this
check is shown in the startFaceDetection()sample method below.
In order to be notified and respond to the detection of a face, your camera
application must set a listener for face detection events. In order to do this, you
must create a listener class that implements
theCamera.FaceDetectionListener interface as shown in the example code below.
29/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
After creating this class, you then set it into your applications Camera object, as
shown in the example code below:
mCamera.setFaceDetectionListener(new MyFaceDetectionListener());
Your application must start the face detection function each time you start (or
restart) the camera preview. Create a method for starting face detection so you
can call it as needed, as shown in the example code below.
You must start face detection each time you start (or restart) the camera preview.
If you use the preview class shown in Creating a preview class, add
your startFaceDetection() method to both
thesurfaceCreated() and surfaceChanged() methods in your preview class, as
shown in the sample code below.
30/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
Nota: Remember to call this method after calling startPreview(). Do not attempt
to start face detection in the onCreate() method of your camera apps main
activity, as the preview is not available by this point in your applications the
execution.
Timelapse
Time lapse video allows users to create video clips that combine pictures taken a
few seconds or minutes apart. This feature uses MediaRecorder to record the
images for a time lapse sequence.
To record a time lapse video with MediaRecorder, you must configure the recorder
object as if you are recording a normal video, setting the captured frames per
second to a low number and using one of the time lapse quality settings, as
shown in the code example below.
31/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
Like
Tweet
Compartilhar
Related posts:
1. Opes de armazenamento no Android (Traduo da documentao
oficial) O Android fornece diversas opes para que voc salve dados persistentes da aplicao. A
soluo que voc escolher depende da...
2. Capturando stream HDV de uma camera Firewire no Linux Este artigo uma
traduo da pgina http://figvam.blogspot.com/2007/01/capturing-hdv-stream-from-camera-in.html, e
explica com capturar video HDV usando o Linux. Apesar de o...
http://www.klebermota.eti.br/2012/08/23/usandoacameranoandroidtraducaodadocumentacaooficial/
32/33
23/12/2014
UsandoacmeranoAndroid(Traduodadocumentaooficial)|klebermota.eti.br
1Comentrio
BlogKleberMota
Entrar
Compartilhar Favorito
OrdenarporMaisrecente
Participedadiscusso...
WellingtonLopes 13daysago
OlKleber,estoutentandoimplementaremminhaaplicao,acamerasem
visualizaodaimagem,ouseja,aopressionarumboto,sertiradoafoto
semqueousurioperceba.Estouusandoocordova,edproblemasaousaro
PictureCallbackpoisnoencontraessaclasse,temalgumaideiaparaeste
fato?
Responder Compartilhar
OQUEISSO?
TAMBMEMBLOGKLEBERMOTA
TutorialdeCanvasParte3
Usandoimagens
Comogravarudiodealta
qualidadeparafilmes
2comentrios8monthsago
2comentrios8monthsago
GuestOlkleber,excelentepost,
KleberMotaRonaldo,vocpode
tenhoumadvida:consigogeraro
data:URL,copioeatravsdeum
gerenciadordemysqlgravoemum
conectaromicrofonediretamenteao
gravadorzoomsemproblema,
tomandoocuidadodefazermarcaes
http://www.klebermota.eti.br/2012/08/23/usandoacameranoandroidtraducaodadocumentacaooficial/
33/33