הרשאות זמן ריצה ב-Android 6 ואילך מעניקות למשתמשים שליטה על הזמן שבו הם מאפשרים להקליט אודיו מהמיקרופון של המכשיר או סרטון מהמצלמה של המכשיר. לפני שאפליקציה יכולה להקליט, המשתמש צריך להעניק או לדחות אותה באמצעות תיבת דו-שיח שהמערכת מציגה.
מערכת Android 12 מספקת למשתמשים שקיפות על ידי הצגת אינדיקטורים כאשר האפליקציה משתמשת במקור נתונים פרטי דרך המצלמות והרשאות לתפעול אפליקציות באמצעות המיקרופון. קריאות לרשומות של תפעול אפליקציות לממשקי API שמוגנים בהרשאות בסביבת זמן ריצה.
הפעלת האפליקציה עוקבת גם אחרי סטטוס הפעילות וגם אחרי מספר הקריאות הנפרדות ל-API, ויוצרת אינטראקציה עם האינדיקטורים של המיקרופון והמצלמה ב-Android 12 כדי להראות למשתמשים מתי האפליקציות ניגשו לנתוני האודיו והמצלמה במכשירים שלהם. כשמשתמשים לוחצים על האינדיקטור של המיקרופון או המצלמה, הם רואים אילו אפליקציות גישה לנתונים שלהם. התכונה הזו חובה לכל יצרני הציוד המקורי.
דרישות החשיפה של האינדיקטור
אלה הדרישות לגבי הסמנים של המיקרופון והמצלמה במכשירים עם Android מגרסה 12 ואילך:
- הסמנים חייבים להופיע בסרגל הסטטוס, ולשמור על תעדוף חזותי ברמה הגבוהה ביותר (למשל, ממוקמים במיקום הימני ביותר בפינה השמאלית העליונה).
- הסמנים חייבים להיות באותו מיקום באופן עקבי, ואפליקציה לא יכולה לחסום אותם כשהיא מופעלת.
- שני הסמנים חייבים להיות בצבע ירוק (או וריאציה של ירוק).
- לחיצה על אחד מהאינדיקטורים או על שניהם חייבת להציג התראה על כך שהמודל יתייחס לאפליקציה באופן הבא:
- שם האפליקציה שמשתמשת במיקרופון ו/או במצלמה
- שם האפליקציה שהשתמשה במיקרופון ו/או במצלמה ב-15 השניות האחרונות
- העברת המשתמשים לדף ההרשאות שניתנות לאפליקציה בהגדרות
שימוש ותכונות
ב-Android 12, בממשק המשתמש יש הבחנה בין שימושים פעילים לבין שימושים מהזמן האחרון. שימושים נחשבים פעילים אם הם מסומנים על ידי המערכת כפעילים, או אם הם נוצרו לפני פחות מ-5 שניות.
- סמלים בשורת הסטטוס מוצגים בכל פעם שאפליקציה מקבלת גישה למיקרופון או למצלמה, וגישה מתמשכת למידע אישי רגיש של המשתמש.
- המשתמשים יכולים ללחוץ על הסמלים האלה ולראות אילו אפליקציות ניגשות למיקרופון, למצלמה או לשניהם.
איור 1. אינדיקטורים בשימוש במיקרופון ובמצלמה שמראים גישה פעילה (בפינה הימנית העליונה)
הגישה נחשבת פעילה כל עוד האינדיקטורים מוצגים. קודם מופיע סמל, ואז הוא הופך לנקודה שנשארת עד שמבטלים את האפליקציה או סוגרים אותה.
כשמשתמש מקייש על הסמנים, נפתחת תיבת דו-שיח שמציינת שאפליקציה משתמשת במצלמה, במיקרופון או בשניהם.
איור 2. אינדיקטורים לגישה פעילה ולגישה מהזמן האחרון
בתמונה באיור 2 מוצגים אינדיקטורים לגישה פעילה, כשאפליקציה שפועלת ניגשה לנתונים ב-5 השניות האחרונות.
מדדי גישה אחרונים מראים שאפליקציה ניגשה לנתונים במהלך 15 השניות האחרונות, אבל האפליקציה לא פעילה. כל האפליקציות הפעילות מוצגות בתיבת הדו-שיח, אבל רק אפליקציה אחת מוצגת כמקור הגישה האחרונה, גם אם יותר מאפליקציה אחת ניגשה לנתונים במסגרת זמן של 15 שניות קודם לכן. תצוגת הגישה נשארת קפואה עד שהמשתמש סוגר את תיבת הדו-שיח של ההתראה.
העברה והפעלה
המחלקה PermissionManager
מספקת שיטה לאכלוס תיבת הדו-שיח, שנמצאת בממשק המשתמש של המערכת.
- ממשק המשתמש של המערכת מגיב למתג הגדרות של המכשיר:
privacy/mic_camera_indicators_enabled
. - ההעברה הכרחית כי יש שני רכבי משלוח נפרדים, בסדר הזה:
- מעבירים את הנתונים.
- הפעלה.
- אסור שממשק המשתמש של המערכת יקרוס אם ה-method ב-
PermissionManager
לא יכולה לספק את הנתונים הנדרשים.
תהליך העבודה
הפונקציונליות של אינדיקטור ההרשאות מורכבת משלושה חלקים עיקריים:
- האפליקציות
- האינדיקטורים (הטיפול בהם מתבצע על ידי SystemUI)
- דרך לקבוע אילו אפליקציות משתמשות בנתונים
PermissionController
מספק את המנגנון לקביעת האפליקציות שמשתמשות בנתונים. SystemUI מקשיב לאפליקציות שמשתמשות בנתונים פרטיים. ב-SystemUI מוצג סמל בסרגל הניווט העליון שתואם להרשאות שבהן נעשה שימוש. השדה PermissionController
מציג נתונים על שימושים כשמשתמש לוחץ על סמל.
איור 3. רכיבי המערכת והתהליך של מעברים (בממשק המשתמש)
המעברים הממוספרים באיור 3 מתוארים בהמשך:
1- אפליקציה מבקשת מידע פרטי מהמערכת.
2- המערכת בודקת את ההרשאות. אם ההרשאות מותרות, המערכת מיידעת את ספק הנתונים ומתעדת את השימוש בתפעול של אפליקציות
3- ספק הנתונים מעביר נתונים לאפליקציה.
4-5 המשתמש לוחץ על הסמלים. ממשק המשתמש של המערכת מבקש נתונים מ-PermissionManager
ומציג את תיבת הדו-שיח למשתמש.
פרטי התהליך
- אפליקציות משתמשות במיקרופון ובמצלמה,
AppOpsManager.startOp
,stopOp
ו (או)noteOp
. כך נוצרות רשומות של פעולות באפליקציה בשרת המערכת. - ממשק המשתמש של המערכת מקשיב לבקשות חדשות של פעולות באפליקציות באמצעות המאזינים
AppOpsManager.OnOpActiveChangedInternalListener
ו-OnOpNotedListener
. כשמתקבלת פעילות חדשה (דרך קריאה ל-startOp
או ל-noteOp
), ממשק המשתמש של המערכת מוודא שהפעילות בוצעה על ידי אפליקציית מערכת. - אם System UI מאמת את השימוש באפליקציות מערכת, ואם השימוש הוא עבור המיקרופון, ממשק המשתמש של המערכת בודק אם המיקרופון מושתק.
- אם ממשק המשתמש של המערכת מאמת שימוש באפליקציות שאינן של המערכת (וגם שימוש במיקרופון לא מושתק, כשהמצלמה מופעלת במקרה של שימוש במצלמה), יוצג סמל שמשקף שימוש כזה.
אם ממשק המשתמש של המערכת מקבל noteOp
, שאין לו משך זמן, הסמל יוצג למשך 5 שניות לפחות. אחרת, הסמל יוצג עד שיישלח אליו stopOp
או למשך 5 שניות, לפי התקופה הארוכה מביניהן. לחיצה של המשתמש על סמל מפעילה כוונה (intent) שמועברת אל PermissionController
כדי להתחיל את תיבת הדו-שיח.
ב-PermissionController
נטען את כל השימושים האחרונים במיקרופון ובמצלמה. המערכת בודקת אם אחת מהן פועלת או פעלה במסגרת הזמן שהוגדרה על ידי ממשק המשתמש. אם היא מוצאת התאמה, יוצגו שם האפליקציה שהשתמשה בהרשאה וההרשאות שדרכה האפליקציה השתמשה.
בגלל השינוי הזה ב-Android 12 ואילך, אפליקציות מסוימות צריכות לשנות את ההתנהגות או להטמיע התנהגות מיוחדת.
שירותי הטלפוניה חייבים להטמיע שימוש בהרשאות (כדי להביא בחשבון את מקבץ המיקרופונים הנפרד שמשמש לשיחות טלפון), כשהם פועלים עם אפליקציית Android Google Search (AGSA) ו-Google Mobile Services (GMS).