תוכלו להשתמש במצלמת Glass כדי לצלם תמונות וסרטונים וגם להציג את השידור של המצלמה במגוון תרחישים לדוגמה.
סקירה כללית
יש שתי אפשרויות לצילום תמונות או סרטון:
- התקשרות אל פעילות המצלמה המובנית באמצעות
startActivityForResult()
. מומלץ להשתמש באפשרות הזו כשהדבר מתאפשר. פיתוח היגיון אישי באמצעות Android Camera API. אם אתם משתמשים בשיטה הזו, יש לפעול לפי ההנחיות הבאות:
- צילום תמונה בלחיצה על לחצן מצלמה וסרטון בלחיצה ארוכה, בדיוק כמו ה-Glass.
- מציין למשתמש אם צולמה תמונה או שצולם סרטון.
- שמירת המסך במצב פעולה במהלך הצילום.
שיתוף המצלמה עם מערכת Glass
אם ה-Glassware משתמש בממשקי ה-API של Android כדי לגשת למצלמה, משחררים את המצלמה באופן זמני במידת האפשר אם המשתמשים לוחצים על לחצן המצלמה.
אפשר לעקוף את השיטה
onKeyDown()
בפעילות וליירטKEYCODE_CAMERA
כדי לטפל בלחיצות על לחצן המצלמה.משחררים את המצלמה ומחזירים את
false
כדי לציין שלא אכלתם את האירוע, כך שמצלמת ה-Glass המובנית תתחיל.
לאחר צילום התמונה או הסרטון, 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. }
צילום תמונות או סרטון
תמונות
כדי לצלם תמונה באמצעות כלי הזכוכית הייעודי של המצלמה:
- מגדירים את הפעולה
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();
}
}
סרטונים
כדי לצלם סרטון באמצעות כלי הזכוכית הייעודי של המצלמה:
- מגדירים את הפעולה
startActivityForResult(Intent, int)
כשהפעולה מוגדרת בתורACTION_VIDEO_CAPTURE
. - ב
onActivityResult(int, int, android.content.Intent)
:- חשוב לוודא שהשדה
requestCode
תואם לקוד הבקשה ששימש להפעלת Intent של צילום וידאו. - יש לוודא שהשדה
resultCode
תואם לערךRESULT_OK
. - משיגים את הנתיב לתמונה הממוזערת של הסרטון מהממשק של
Intent
באמצעות המפתחEXTRA_THUMBNAIL_FILE_PATH
, כדי שניתן יהיה לראות תצוגה מקדימה במקרה הצורך. - המסלול אל הסרטון המוקלט זמין בקטע האקסטרה של
Intent
עם המפתחEXTRA_VIDEO_FILE_PATH
.
- חשוב לוודא שהשדה