您可以使用 Glass 相機來拍攝圖片和影片,以及顯示各種不同用途的相機預覽串流。
總覽
擷取圖片或影片的方法有兩種:
- 使用
startActivityForResult()
呼叫內建攝影機活動。請盡可能使用這個選項。 使用 Android Camera API 建構自己的邏輯。如果使用這個方法,請遵守以下規範:
- 只要像使用 Glass 一樣,按下相機按鈕並長按就能拍攝影片。
- 告知使用者是否已拍照或錄影。
- 在拍攝期間讓螢幕保持開啟。
使用 Glass 系統分享相機
如果您的 Glassware 使用 Android API 存取相機,當使用者按下硬體相機按鈕時,請暫時釋出相機。
覆寫活動中的
onKeyDown()
方法並攔截KEYCODE_CAMERA
來處理相機按鈕的按下動作。啟動相機並傳回
false
,表示您未取用事件,因此內建 Glass 相機會啟動。
圖片或影片拍攝完成後,G Glass 會返回您的活動,讓您可以在
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. }
擷取圖片或影片
圖片
如何使用內建的 Camera Glassware 拍攝圖片:
- 呼叫
startActivityForResult(Intent, int)
,並將動作設為ACTION_IMAGE_CAPTURE
。 - 在
onActivityResult(int, int, android.content.Intent)
中:- 確認
requestCode
與啟動圖片擷取意圖時使用的要求代碼相符。 - 確認
resultCode
與RESULT_OK
相符。 - 如有需要,可以使用
Intent
額外金鑰EXTRA_THUMBNAIL_FILE_PATH
取得圖片縮圖的路徑。 - 完整映像檔的路徑可透過
Intent
的額外項目使用EXTRA_PICTURE_FILE_PATH
鍵取得。當圖片擷取意圖將控制項傳回 Glassware 時,系統可能無法將圖片完全寫入檔案。確認映像檔檔案存在,或使用FileObserver
來監控其父項目錄。準備好完整圖片時,請載入檔案並將其用於 Glassware。
- 確認
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();
}
}
影片
如何使用內建的 Camera Glassware 拍攝影片:
- 呼叫
startActivityForResult(Intent, int)
,並將動作設為ACTION_VIDEO_CAPTURE
。 - 在
onActivityResult(int, int, android.content.Intent)
中:- 確認
requestCode
與啟動影片擷取意圖時使用的要求代碼相符。 - 確認
resultCode
與RESULT_OK
相符。 - 從
Intent
的額外項目取得EXTRA_THUMBNAIL_FILE_PATH
鍵的影片縮圖路徑,以顯示預覽。 - 您可以從
EXTRA_VIDEO_FILE_PATH
的Intent
額外項目中取得錄製影片的路徑。
- 確認