Bạn có thể sử dụng máy ảnh Glass để chụp ảnh và quay video cũng như để để hiển thị luồng xem trước của máy ảnh để xem nhiều trong nhiều trường hợp sử dụng.
Tổng quan
Bạn có hai lựa chọn để chụp ảnh hoặc quay video:
- Gọi hoạt động của camera tích hợp sẵn bằng
startActivityForResult()
. Hãy sử dụng cách này khi có thể. Xây dựng logic của riêng bạn bằng API Máy ảnh Android. Hãy làm theo các nguyên tắc sau nếu bạn đang sử dụng phương pháp này:
- Chụp ảnh bằng một lượt nhấp vào nút camera và quay video sau một cú nhấp chuột, giống như cách Glass đã làm.
- Cho người dùng biết liệu hình ảnh đã được chụp hay quay video.
- Luôn bật màn hình trong khi chụp.
Chia sẻ camera với hệ thống Glass
Nếu Glassware của bạn sử dụng API Android để truy cập vào máy ảnh, tạm thời thả camera ra khi có thể nếu người dùng nhấn phần cứng nút camera.
Ghi đè
onKeyDown()
trong hoạt động của bạn và chặnKEYCODE_CAMERA
để xử lý các lần nhấn nút máy ảnh.Thả camera ra rồi trả về
false
để cho biết rằng bạn không sử dụng để máy ảnh Glass tích hợp sẵn khởi động.
Sau khi quá trình chụp ảnh hoặc quay video diễn ra, Glass sẽ trả về nơi bạn có thể lấy lại máy ảnh
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. }
Chụp ảnh hoặc quay video
Hình ảnh
Cách chụp ảnh bằng Thuỷ tinh tích hợp sẵn cho máy ảnh:
- Gọi điện
startActivityForResult(Intent, int)
với hành động được đặt làACTION_IMAGE_CAPTURE
. - Trong
onActivityResult(int, int, android.content.Intent)
:- Đảm bảo rằng
requestCode
khớp với mã yêu cầu được dùng khi bắt đầu ý định chụp ảnh. - Đảm bảo rằng
resultCode
khớp vớiRESULT_OK
. - Lấy đường dẫn đến hình thu nhỏ của hình ảnh từ
Điều khoản dịch vụ và Chính sách quyền riêng tư của
Intent
vớiEXTRA_THUMBNAIL_FILE_PATH
khoá, nếu cần. - Đường dẫn đến hình ảnh đầy đủ có sẵn từ
Điều khoản dịch vụ và Chính sách quyền riêng tư của
Intent
vớiEXTRA_PICTURE_FILE_PATH
. Khi ý định chụp ảnh trả về quyền kiểm soát cho Bằng thuỷ tinh, hình ảnh có thể không được ghi đầy đủ vào tệp. Xác minh tệp hình ảnh tồn tại hoặc sử dụngFileObserver
để giám sát thư mục mẹ của nó. Khi hình ảnh đầy đủ khả dụng, hãy tải tệp và sử dụng tệp đó trong Glassware của bạn.
- Đảm bảo rằng
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
Cách quay video bằng Kính thuỷ tinh tích hợp sẵn:
- Gọi điện
startActivityForResult(Intent, int)
với hành động được đặt làACTION_VIDEO_CAPTURE
. - Trong
onActivityResult(int, int, android.content.Intent)
:- Đảm bảo rằng
requestCode
khớp với mã yêu cầu được dùng khi bắt đầu ý định quay video. - Đảm bảo rằng
resultCode
khớp vớiRESULT_OK
. - Lấy đường dẫn đến hình thu nhỏ của video từ
Điều khoản dịch vụ và Chính sách quyền riêng tư của
Intent
với tính năngEXTRA_THUMBNAIL_FILE_PATH
để hiển thị bản xem trước nếu cần. - Đường dẫn đến video đã ghi có sẵn từ
Điều khoản dịch vụ và Chính sách quyền riêng tư của
Intent
vớiEXTRA_VIDEO_FILE_PATH
.
- Đảm bảo rằng