Anda dapat menggunakan kamera Glass untuk mengambil gambar dan video serta untuk menampilkan streaming pratinjau kamera untuk berbagai kasus penggunaan yang berbeda.
Ringkasan
Anda memiliki dua opsi untuk mengambil gambar atau video:
- Memanggil aktivitas kamera bawaan dengan
startActivityForResult()
Gunakan opsi ini jika memungkinkan. Membangun logika Anda sendiri dengan Android Camera API. Ikuti panduan ini jika Anda menggunakan metode ini:
- Ambil gambar dengan mengklik tombol kamera dan video dengan mengklik lama, seperti yang dilakukan Glass.
- Menunjukkan kepada pengguna apakah gambar diambil atau video direkam.
- Tetap aktifkan layar selama pengambilan gambar.
Berbagi kamera dengan sistem Glass
Jika Glassware Anda menggunakan API Android untuk mengakses kamera, melepaskan kamera untuk sementara jika memungkinkan jika pengguna menekan hardware tombol kamera.
Ganti
onKeyDown()
dalam aktivitas Anda dan mencegatKEYCODE_CAMERA
untuk menangani penekanan tombol kamera.Lepaskan kamera dan tampilkan
false
untuk menunjukkan bahwa Anda tidak menggunakan sehingga kamera Glass bawaan dimulai.
Setelah pengambilan gambar atau video berlangsung, Glass kembali ke aktif, di mana Anda dapat mengklaim kembali kamera
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. }
Mengambil gambar atau video
Gambar
Untuk mengambil gambar menggunakan Camera Glassware bawaan:
- Telepon
startActivityForResult(Intent, int)
dengan tindakan yang ditetapkan sebagaiACTION_IMAGE_CAPTURE
. - Di
onActivityResult(int, int, android.content.Intent)
:- Pastikan bahwa
requestCode
cocok dengan kode permintaan yang digunakan saat memulai intent pengambilan gambar. - Pastikan
resultCode
cocok denganRESULT_OK
. - Dapatkan jalur ke thumbnail gambar dari
Intent
tambahan denganEXTRA_THUMBNAIL_FILE_PATH
jika perlu. - Jalur ke gambar penuh tersedia dari
Intent
tambahan denganEXTRA_PICTURE_FILE_PATH
tombol. Saat intent pengambilan gambar mengembalikan kontrol ke Gelas, gambar mungkin tidak sepenuhnya ditulis ke file. Verifikasi bahwa file gambar tersebut ada atau menggunakanFileObserver
untuk memantau direktori induknya. Ketika gambar penuh yang tersedia, memuat file dan menggunakannya di Glassware Anda.
- Pastikan bahwa
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();
}
}
Video
Untuk merekam video menggunakan Peralatan Kaca Kamera bawaan:
- Telepon
startActivityForResult(Intent, int)
dengan tindakan yang ditetapkan sebagaiACTION_VIDEO_CAPTURE
. - Di
onActivityResult(int, int, android.content.Intent)
:- Pastikan bahwa
requestCode
cocok dengan kode permintaan yang digunakan saat memulai intent perekaman video. - Pastikan
resultCode
cocok denganRESULT_OK
. - Dapatkan jalur ke thumbnail video dari
Intent
tambahan denganEXTRA_THUMBNAIL_FILE_PATH
untuk menampilkan pratinjau jika diperlukan. - Jalur ke video yang direkam tersedia dari
Intent
tambahan denganEXTRA_VIDEO_FILE_PATH
tombol.
- Pastikan bahwa