ההרשאות שקשורות למיקום, למיקרופון ולמצלמה מעניקות לאפליקציה גישה למידע רגיש במיוחד על המשתמשים. הפלטפורמה כוללת כמה מנגנונים, שמתוארים בדף הזה, שעוזרים למשתמשים לקבל מידע ולשלוט באפליקציות שיכולות לגשת למיקום, למיקרופון ולמצלמה.
התכונות האלה של המערכת ששומרות על הפרטיות לא אמורות להשפיע על האופן שבו האפליקציה מטפלת בהרשאות שקשורות למיקום, למיקרופון ולמצלמה, כל עוד פועלים לפי השיטות המומלצות לשמירה על הפרטיות.
בפרט, חשוב לוודא שביצעתם את הפעולות הבאות באפליקציה:
- צריך להמתין עד שהמשתמש ייתן לאפליקציה את ההרשאה
CAMERA
לפני שניתנת גישה למצלמה של המכשיר. - צריך להמתין לפני שנותנים גישה למיקרופון של המכשיר עד שהמשתמש ייתן לאפליקציה את ההרשאה
RECORD_AUDIO
. - כדאי להמתין עד שהמשתמש יבצע אינטראקציה עם תכונה באפליקציה שנדרשת עבורה הרשאת
ACCESS_COARSE_LOCATION
או הרשאתACCESS_FINE_LOCATION
, לפני שמבקשים את ההרשאות האלה. ההסבר מופיע במדריך בנושא בקשת הרשאות גישה למיקום. - צריך לחכות עד שהמשתמש יעניק לאפליקציה את ההרשאה
ACCESS_COARSE_LOCATION
או את ההרשאהACCESS_FINE_LOCATION
לפני שמבקשים את ההרשאהACCESS_BACKGROUND_LOCATION
.
מרכז בקרת הפרטיות
במכשירים נתמכים שפועלת בהם מערכת Android בגרסה 12 ומעלה, מופיע מסך של מרכז הבקרה לפרטיות בהגדרות המערכת. במסך הזה, המשתמשים יכולים לגשת למסכים נפרדים שבהם מוצג מתי אפליקציות ניגשות למידע על המיקום, המצלמה והמיקרופון. בכל מסך מוצג ציר זמן שבו אפשר לראות מתי אפליקציות שונות ניגשו לסוג מסוים של נתונים. איור 1 מציג את ציר הזמן של הגישה לנתונים של פרטי מיקום.
הצגת ההצדקה לגישה לנתונים
האפליקציה יכולה לספק למשתמשים הסבר שיעזור להם להבין למה האפליקציה ניגשת למידע על המיקום, המצלמה או המיקרופון. ההסבר הזה יכול להופיע במסך החדש של מרכז הבקרה להגדרות הפרטיות, במסך ההרשאות של האפליקציה או בשניהם.
כדי להסביר למה האפליקציה ניגשת למיקום, למצלמה ולמיקרופון, צריך לבצע את השלבים הבאים:
מוסיפים פעילות שכשמתחילים אותה, מספקת נימוק כלשהו לכך שהאפליקציה מבצעת סוג מסוים של פעולת גישה לנתונים. בפעילות הזו, מגדירים את מאפיין
android:permission
לערךSTART_VIEW_PERMISSION_USAGE
.אם האפליקציה שלכם מטרגטת ל-Android מגרסה 12 ואילך, אתם חייבים להגדיר ערך למאפיין
android:exported
באופן מפורש.מוסיפים את מסנן ה-Intent הבא לפעילות החדשה:
<!-- android:exported required if you target Android 12. --> <activity android:name=".DataAccessRationaleActivity" android:permission="android.permission.START_VIEW_PERMISSION_USAGE" android:exported="true"> <!-- VIEW_PERMISSION_USAGE shows a selectable information icon on your app permission's page in system settings. VIEW_PERMISSION_USAGE_FOR_PERIOD shows a selectable information icon on the Privacy Dashboard screen. --> <intent-filter> <action android:name="android.intent.action.VIEW_PERMISSION_USAGE" /> <action android:name="android.intent.action.VIEW_PERMISSION_USAGE_FOR_PERIOD" /> <category android:name="android.intent.category.DEFAULT" /> ... </intent-filter> </activity>
קובעים אילו פעילויות יופיעו בנימוק לגישה לנתונים. לדוגמה, אפשר להציג את האתר של האפליקציה או מאמר במרכז העזרה. כדי לספק הסבר מפורט יותר על סוגי הנתונים שהאפליקציה ניגשת אליהם, וגם על מועד הגישה, צריך לטפל בתוספים שהמערכת כוללת כשהיא מפעילה את הכוונה לשימוש בהרשאה:
- אם המערכת מפעילה את
ACTION_VIEW_PERMISSION_USAGE
, האפליקציה יכולה לאחזר ערך עבורEXTRA_PERMISSION_GROUP_NAME
. - אם המערכת מפעילה את
ACTION_VIEW_PERMISSION_USAGE_FOR_PERIOD
, האפליקציה יכולה לאחזר ערכים שלEXTRA_PERMISSION_GROUP_NAME
,EXTRA_ATTRIBUTION_TAGS
,EXTRA_START_TIME
ו-EXTRA_END_TIME
.
- אם המערכת מפעילה את
בהתאם למסנני הכוונות שמוסיפים, המשתמשים יראו סמל מידע לצד שם האפליקציה במסכים מסוימים:
- אם מוסיפים את מסנן ה-Intent שמכיל את הפעולה
VIEW_PERMISSION_USAGE
action, המשתמשים יראו את הסמל בדף ההרשאות של האפליקציה בהגדרות המערכת. אפשר להחיל את הפעולה הזו על כל הרשאות זמן הריצה. - אם מוסיפים את מסנן ה-Intent שמכיל את הפעולה
VIEW_PERMISSION_USAGE_FOR_PERIOD
, המשתמשים יראו את הסמל לצד שם האפליקציה בכל פעם שהאפליקציה תופיע במסך מרכז הפרטיות.
כשמשתמשים לוחצים על הסמל הזה, מתחילה פעילות ההסבר של האפליקציה.
אינדיקטורים
לא אמורים להידרש שינויים בלוגיקה של האפליקציה בגלל הסמל שמוזכר בקטע הזה.במכשירים עם Android בגרסה 12 ומעלה, כשלאפליקציה יש גישה למיקרופון או למצלמה, מופיע סמל בשורת הסטטוס. אם האפליקציה נמצאת במצב מסך מלא, הסמל מופיע בפינה הימנית העליונה של המסך. המשתמשים יכולים לפתוח את ההגדרות המהירות ולבחור בסמל כדי לראות אילו אפליקציות משתמשות כרגע במיקרופון או במצלמה. איור 2 מציג צילום מסך לדוגמה שמכיל את הסמלים.
זיהוי המיקום של האינדיקטורים במסך
אם האפליקציה תומכת במצב immersive או בממשק משתמש במסך מלא, יכול להיות שהאינדיקטורים יחפפו לרגע את ממשק המשתמש של האפליקציה. כדי לעזור לכם להתאים את ממשק המשתמש לאינדיקטורים האלה, המערכת מציגה את השיטה getPrivacyIndicatorBounds()
, שמוצגת בקטע הקוד הבא. באמצעות ה-API הזה, אפשר לזהות את הגבולות שבהם יכולים להופיע האינדיקטורים. אחרי שתראו את זה, יכול להיות שתחליטו לשנות את האופן שבו ממשק המשתמש של המסך מאורגן.
Kotlin
view.setOnApplyWindowInsetsListener { view, windowInsets -> val indicatorBounds = windowInsets.getPrivacyIndicatorBounds() // change your UI to avoid overlapping windowInsets }
החלפת מצב
במכשירים נתמכים שפועלת בהם מערכת Android 12 ומעלה, המשתמשים יכולים להפעיל או להשבית את הגישה למצלמה ולמיקרופון לכל האפליקציות במכשיר בלחיצה על אפשרות מעבר אחת. המשתמשים יכולים לגשת לאפשרויות ההפעלה וההשבתה מההגדרות המהירות, כמו שמוצג באיור 3, או ממסך הפרטיות בהגדרות המערכת.
המתגים של המצלמה והמיקרופון משפיעים על כל האפליקציות במכשיר:
- כשהמשתמש משבית את הגישה למצלמה, האפליקציה מקבלת פיד מצלמה ריק.
כשהמשתמש משבית את הגישה למיקרופון, האפליקציה מקבלת אודיו שקט. בנוסף, חיישני התנועה מוגבלים בקצב, ללא קשר להצהרה על ההרשאה
HIGH_SAMPLING_RATE_SENSORS
.
כשהמשתמש משבית את הגישה למצלמה או למיקרופון, ואז מפעיל אפליקציה שזקוקה לגישה למידע מהמצלמה או מהמיקרופון, המערכת מזכירה למשתמש שהמתג להשבתה של הגישה בכל המכשיר מושבת.
בדיקת התמיכה במכשיר
כדי לבדוק אם מכשיר תומך בהחלפה בין המיקרופון למצלמה, מוסיפים את הלוגיקה שמופיעה בקטע הקוד הבא:
Kotlin
val sensorPrivacyManager = applicationContext .getSystemService(SensorPrivacyManager::class.java) as SensorPrivacyManager val supportsMicrophoneToggle = sensorPrivacyManager .supportsSensorToggle(Sensors.MICROPHONE) val supportsCameraToggle = sensorPrivacyManager .supportsSensorToggle(Sensors.CAMERA)
Java
SensorPrivacyManager sensorPrivacyManager = getApplicationContext() .getSystemService(SensorPrivacyManager.class); boolean supportsMicrophoneToggle = sensorPrivacyManager .supportsSensorToggle(Sensors.MICROPHONE); boolean supportsCameraToggle = sensorPrivacyManager .supportsSensorToggle(Sensors.CAMERA);