ההרשאות שקשורות למיקום, למיקרופון ולמצלמה מעניקות לאפליקציה גישה למידע רגיש במיוחד על המשתמשים. הפלטפורמה כוללת כמה מנגנונים, שמתוארים בדף הזה, שיעזרו למשתמשים לקבל מידע ולשלוט באפליקציות שיכולות לגשת למיקום, למיקרופון ולמצלמה.
תכונות המערכת האלה לשמירה על הפרטיות לא אמורות להשפיע על האופן שבו האפליקציה מטפלת בהרשאות שקשורות למיקום, למיקרופון ולמצלמה, כל עוד פועלים לפי השיטות המומלצות לשמירה על הפרטיות.
במיוחד, חשוב לבצע את הפעולות הבאות באפליקציה:
- צריך להמתין עד שהמשתמש יעניק לאפליקציה את ההרשאה
CAMERA
כדי לגשת למצלמה של המכשיר. - ממתינים לגישה למיקרופון של המכשיר עד שהמשתמש ייתן לאפליקציה את ההרשאה
RECORD_AUDIO
. - לפני ששולחים בקשה להרשאה
ACCESS_COARSE_LOCATION
או להרשאהACCESS_FINE_LOCATION
, צריך להמתין עד שהמשתמש יבצע פעולה בתכונה באפליקציה שמחייבת גישה למיקום, כפי שמתואר במדריך בנושא בקשה להרשאות מיקום. - לפני ששולחים בקשה להרשאה
ACCESS_BACKGROUND_LOCATION
, צריך לחכות עד שהמשתמש יעניק לאפליקציה את ההרשאהACCESS_COARSE_LOCATION
או את ההרשאהACCESS_FINE_LOCATION
.
מרכז בקרת הפרטיות
במכשירים נתמכים עם Android מגרסה 12 ואילך, המסך 'מרכז הבקרה של הפרטיות' מופיע בהגדרות המערכת. במסך הזה, המשתמשים יכולים לגשת למסכים נפרדים שבהם מוצג מתי אפליקציות ניגשות למידע על המיקום, המצלמה והמיקרופון. בכל מסך מוצג ציר זמן של הזמנים שבהם אפליקציות שונות ניגשו לסוג מסוים של נתונים. באיור 1 מוצג ציר הזמן של הגישה לנתונים של פרטי המיקום.
הצגת נימוק לגישה לנתונים
אתם יכולים להסביר למשתמשים באפליקציה למה היא צריכה גישה למיקום, למצלמה או למיקרופון. ההסבר הזה יכול להופיע במסך החדש של מרכז הבקרה להגדרות הפרטיות, במסך ההרשאות של האפליקציה או בשניהם.
כדי להסביר למה לאפליקציה שלך נדרשת גישה למיקום, למצלמה ולמיקרופון, צריך לבצע את השלבים הבאים:
מוסיפים פעילות שמספקת נימוק כלשהו לכך שהאפליקציה מבצעת סוג מסוים של פעולה לגישה לנתונים כשהיא מופעלת. בפעילות הזו, מגדירים את המאפיין
android:permission
לערךSTART_VIEW_PERMISSION_USAGE
.אם האפליקציה מטרגטת את Android 12 ואילך, צריך להגדיר באופן מפורש ערך במאפיין
android:exported
.מוסיפים את מסנן הכוונה הבא לפעילות שנוספה:
<!-- 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
, המשתמשים רואים את הסמל בדף ההרשאות של האפליקציה בהגדרות המערכת. אפשר להחיל את הפעולה הזו על כל ההרשאות שבתחילת ההפעלה. - אם תוסיפו את מסנן ה-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);