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