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