
new Intent עם הפעולה MediaStore.ACTION_IMAGE_CAPTURE. לא מציינים איזו אפליקציה להפעיל, והמערכת פותחת את אפליקציית המצלמה.startActivityForResult ולא עם startActivity, כי רוצים לקבל חזרה את התמונה. מגדירים קבוע REQUEST_CODE_TAKE_PICTURE עם הערך 1.resultCode הוא RESULT_OK. אם המשתמש ביטל, לא קורה דבר.data.getExtras(), שהוא Bundle. מוציאים ממנו את המפתח data עם cast ל-Bitmap.findViewById וקוראים ל-setImageBitmap. ה-Bitmap מכיל את כל הפיקסלים של התמונה.הטקסט המלא של הדקות הראשונות בהרצאה «מצלמה - חלק 1 - צילום תמונה» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אנחנו מגיעים לסדרת סרטונים שבהם אנחנו הולכים לבצע שימוש במצלמה של המכשיר. יכול להיות שבאפליקציה שאנחנו בונים אנחנו רוצים לאפשר למשתמש ללחוץ על איזשהו לחצן ולצלם תמונות מתוך האפליקציה.
יכול להיות שבלחיצת לחצן אנחנו רוצים להפנות אותו לאפליקציה של המכשיר. אז בואו נראה איך אנחנו יכולים לבצע את זה בסדרת הסרטונים הבאים. בסרטון הזה מה שאנחנו הולכים לעשות זה פשוט מאוד בלחיצה על הלחצן לאפליקציה של המצלמה שתאפשר למשתמש לצלם תמונה אבל אנחנו גם רוצים בעצמנו לראות את התמונה אז הנה יש לנו כאן איזשהו אימג' ויו שלאחר
הצילום אנחנו רוצים להציג את התמונה באימג' ויו אז בואו ניכנס לקוד ונראה איך אפשר לעשות את זה יש לנו פה את האירוע של הלחצן ומה שאנחנו רוצים זה לפתוח את האפליקציה שנמצאת במכשיר שמטפלת במצלמה ומאפשרת לצלם תמונה את זה אנחנו עושים על ידי implicit intent.
אז בואו נפתח intent, נגדיר שווה new intent וזה כמובן implicit כי אנחנו לא אומרים לו איזו אפליקציה להפעיל ואנחנו צריכים לגשת ל-intent ולתת לו אקשן והאקשן שאנחנו נותנים לו זה האקשן עם הקבוע הבא media store שזה בעצם איזושהי מחלקה שמכילה בתוכה כל מיני קבועים שקשורים למדיה, ל-image, לוידאו, לסקנרים וכדומה.
ואנחנו רוצים Action Image Capture. זה בעצם קבוע שמציין בדיוק את האקשן שאנחנו צריכים לתת עבור האינטנט הזה, כך שהוא יפתח לנו את האפליקציה המתאימה שמטפלת במצלמה. וכל מה שאנחנו רוצים זה להריץ אותו.
אבל אנחנו לא רוצים to start activity, אלא start activity for result, כי אנחנו גם רוצים לקבל בחזרה את התמונה שצולמה וזה אומר שהאפליקציה הזאת מחזירה לנו מידע שזאת התמונה ואז אנחנו נוכל להציג אותה.
אז הנה יש לנו פה את ה-Intent ואנחנו רוצים איזשהו request code אז בואו נייצר פה למעלה private final static integer ואנחנו רוצים request code take picture נניח ניתן לו אחד נעתיק את ה-request code נדביק אותו פה וכעת זה יפתח לנו את האפליקציה של המצלמה.
הדבר הבא שאנחנו רוצים לבצע זה לדרוס את הפונקציה onActivityResult. בפונקציה הזאת אנחנו הולכים לקבל בחזרה את התמונה.
בואו ניפטר פה מהדירקטיב הזה. ואנחנו רוצים כמובן לבצע בדיקה האם ה-requestCode שאנחנו מקבלים בחזרה שווה ל-requestCode.picture.takePicture שהגדרנו למעלה.
ואנחנו רוצים גם לבדוק את ה-result code, מפני שאפליקציית התמונה בדרך כלל מה שהיא תעשה היא תגיד למשתמש האם אתה רוצה לאשר או לבטל. אם המשתמש מבטל אז ה-request code יהיה כזה של ביטול.
רק אם המשתמש מאשר ורוצה באמת לשמור את התמונה, אז אנחנו רוצים לבצע פעולה ולהציג אותה או לשמור אותה. לכן אנחנו רוצים לבדוק האם המשתמש לחץ על אישור באפליקציה הזאת וזה יהיה result OK. במידה ושני הקבועים האלה בדיוק מה שאנחנו מצפים, מה שאנחנו רוצים לעשות זה לשלוף את התמונה.
התמונה נמצאת בתוך הדאטה, באינטנט של הדאטה, בתוך אקסטראז. קודם כל אנחנו צריכים לשלוף אקסטראז. אקסטראז זה בנדל, ובנדל זה בעצם אוסף של key values שניתן למלא אותו בערכים, ולכל value יש את ה-key שלו.
אז אנחנו קודם כל רוצים לקבל וכאן לשלוף החוצה את התמונה. בתוך ה-bundle אנחנו צריכים לשלוף data. data בעצם מכיל את התמונה, data זה ה-key שיש לו את התמונה והתמונה תהיה מסוג ביטמאפ.
כמובן שאנחנו צריכים כאן איזשהו casting והנה שלפנו את התמונה, כל מה שנשאר לנו לעשות זה לגשת ל-image view ולכן אנחנו צריכים לקחת את ה-id הזה, להגדיר אותו פה למעלה, private image view לאתר אותו כמובן, image view picture שווה image view find view by ID והנה איתרנו אותו ועכשיו אנחנו צריכים לגשת אליו,
image view picture ו-to set image bitmap כי יש לנו כבר את הביטמאפ