Você pode usar a câmera do Google Glass para capturar imagens e vídeos e também mostrar o fluxo de visualização da câmera para exibir vários itens. de diferentes casos de uso.
Visão geral
Você tem duas opções para capturar imagens ou vídeos:
- Chamar a atividade da câmera integrada com
startActivityForResult()
Use essa opção quando possível. Construa sua própria lógica com o API Android Camera. Se estiver usando esse método, siga estas diretrizes:
- Com um clique no botão da câmera, tire uma foto e grave um vídeo com um clique longo, assim como o Glass.
- Indique ao usuário se uma foto foi tirada ou se um vídeo foi gravado.
- Mantenha a tela acesa durante a captura.
Compartilhar a câmera com o sistema do Glass
Se o Glassware usa as APIs do Android para acessar a câmera, Libere temporariamente a câmera quando possível se os usuários pressionarem o hardware botão da câmera.
Substitua o
onKeyDown()
em sua atividade e interceptarKEYCODE_CAMERA
para lidar com o pressionamento do botão da câmera.Solte a câmera e retorne
false
para indicar que você não consumiu o para que a câmera integrada do Google Glass seja iniciada.
Após a captura da imagem ou do vídeo, o Google Glass retorna ao seu onde é possível recuperar a câmera
onResume()
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_CAMERA) { // Stop the preview and release the camera. // Execute your logic as quickly as possible // so the capture happens quickly. return false; } else { return super.onKeyDown(keyCode, event); } } @Override protected void onResume() { super.onResume(); // Re-acquire the camera and start the preview. }
Capturar imagens ou vídeos
Imagens
Para capturar uma imagem usando o Glassware integrado da câmera:
- Ligação
startActivityForResult(Intent, int)
com a ação definida comoACTION_IMAGE_CAPTURE
- Em
onActivityResult(int, int, android.content.Intent)
:- Verifique se o
requestCode
corresponde ao código de solicitação usado ao iniciando a intent de captura de imagem. - Confira se
resultCode
corresponde aRESULT_OK
. - Encontre o caminho para a miniatura da imagem no
De
Intent
extra com oEXTRA_THUMBNAIL_FILE_PATH
se necessário. - O caminho para a imagem completa está disponível no
De
Intent
extra com oEXTRA_PICTURE_FILE_PATH
de dados. Quando a intent de captura de imagem retorna o controle para o Glassware, a imagem pode não estar totalmente gravada no arquivo. Verificar que o arquivo de imagem existe ou use umFileObserver
para monitorar o diretório pai. Quando a imagem inteira for disponível, carregue o arquivo e use-o no Glassware.
- Verifique se o
private static final int TAKE_PICTURE_REQUEST = 1;
private void takePicture() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, TAKE_PICTURE_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == TAKE_PICTURE_REQUEST && resultCode == RESULT_OK) {
String thumbnailPath = data.getStringExtra(Intents.EXTRA_THUMBNAIL_FILE_PATH);
String picturePath = data.getStringExtra(Intents.EXTRA_PICTURE_FILE_PATH);
processPictureWhenReady(picturePath);
// TODO: Show the thumbnail to the user while the full picture is being
// processed.
}
super.onActivityResult(requestCode, resultCode, data);
}
private void processPictureWhenReady(final String picturePath) {
final File pictureFile = new File(picturePath);
if (pictureFile.exists()) {
// The picture is ready; process it.
} else {
// The file does not exist yet. Before starting the file observer, you
// can update your UI to let the user know that the application is
// waiting for the picture (for example, by displaying the thumbnail
// image and a progress indicator).
final File parentDirectory = pictureFile.getParentFile();
FileObserver observer = new FileObserver(parentDirectory.getPath(),
FileObserver.CLOSE_WRITE | FileObserver.MOVED_TO) {
// Protect against additional pending events after CLOSE_WRITE
// or MOVED_TO is handled.
private boolean isFileWritten;
@Override
public void onEvent(int event, String path) {
if (!isFileWritten) {
// For safety, make sure that the file that was created in
// the directory is actually the one that we're expecting.
File affectedFile = new File(parentDirectory, path);
isFileWritten = affectedFile.equals(pictureFile);
if (isFileWritten) {
stopWatching();
// Now that the file is ready, recursively call
// processPictureWhenReady again (on the UI thread).
runOnUiThread(new Runnable() {
@Override
public void run() {
processPictureWhenReady(picturePath);
}
});
}
}
}
};
observer.startWatching();
}
}
Vídeos
Para capturar um vídeo usando o Glassware integrado da câmera:
- Ligação
startActivityForResult(Intent, int)
com a ação definida comoACTION_VIDEO_CAPTURE
- Em
onActivityResult(int, int, android.content.Intent)
:- Verifique se o
requestCode
corresponde ao código de solicitação usado ao iniciando a intent de captura de vídeo. - Confira se
resultCode
corresponde aRESULT_OK
. - Encontre o caminho para a miniatura do vídeo no
De
Intent
extra com oEXTRA_THUMBNAIL_FILE_PATH
para exibir uma visualização, se necessário. - O caminho para o vídeo gravado está disponível no
De
Intent
extra com oEXTRA_VIDEO_FILE_PATH
de dados.
- Verifique se o