Android 11 מאפשר למשתמשים לציין בצורה מפורטת יותר הרשאות המיקום, המיקרופון והמצלמה. בנוסף, המערכת מאפס את ההרשאות של אפליקציות שלא בשימוש ומטרגטות את Android 11, או גבוהה יותר, וייתכן שאפליקציות יצטרכו לעדכן את ההרשאות שהן מצהירות עליהן להשתמש בחלון התראת המערכת או לקרוא מידע הקשור למספרי טלפון.
הרשאות חד-פעמיות
החל מ-Android 11, בכל פעם שהאפליקציה מבקשת הרשאה שקשורים למיקום, למיקרופון או למצלמה, בתיבת הדו-שיח להרשאות שגלויות למשתמש מכיל אפשרות בשם רק הפעם. אם המשתמש בוחר באפשרות הזאת בתיבת הדו-שיח, האפליקציה שלכם קיבלה הרשאה חד-פעמית זמנית.
מידע נוסף על האופן שבו המערכת מטפלת בפעם אחת הרשאות.
איפוס אוטומטי של הרשאות מאפליקציות שלא בשימוש
אם האפליקציה מטרגטת את Android 11 ואילך ולא נעשה בה שימוש במשך מספר פעמים חודשים, המערכת מגינה על נתוני המשתמשים על ידי איפוס אוטומטי של מידע רגיש הרשאות זמן ריצה שהמשתמש העניק לאפליקציה שלך. לפעולה הזאת יש כאילו המשתמש צפה בהרשאה בהגדרות המערכת ושינה את רמת הגישה של האפליקציה לדחייה. אם האפליקציה שלכם פועלת לפי השיטות המומלצות בקשת הרשאות בזמן הריצה, לא צריך לבצע שינויים באפליקציה. הסיבה לכך היא שבמקרים שבהם המשתמש מקיים אינטראקציה עם תכונות באפליקציה, צריך לוודא שהתכונות את ההרשאות הדרושות.
מידע נוסף על האופן שבו המערכת מאפסת באופן אוטומטי הרשאות של הרשאות שלא בשימוש של Google.
הצגת תיבת דו-שיח של הרשאה
החל מ-Android 11, אם המשתמש מקיש על דחייה הרשאה ספציפית יותר מפעם אחת במהלך כל משך החיים של ההתקנה של האפליקציה ב- מכשיר, המשתמש לא רואה את תיבת הדו-שיח להרשאות המערכת אם האפליקציה יבקש את ההרשאה הזו שוב. מפעולת המשתמש משתמע "לא לשאול שוב". במצב מופעל הגרסאות הקודמות, המשתמשים יראו את תיבת הדו-שיח של הרשאות המערכת בכל פעם האפליקציה ביקשה הרשאה, אלא אם המשתמש בחר בעבר באפשרות 'לא לשאול' שוב" תיבת סימון או אפשרות. השינוי הזה בהתנהגות ב-Android 11 מעודד את המשתמשים בקשות חוזרות להרשאות שהמשתמשים בחרו לדחות.
כדי לזהות אם ההרשאות של האפליקציה נדחו באופן סופי (לניפוי באגים) ומטרות בדיקה), השתמשו בפקודה הבאה:
adb shell dumpsys package PACKAGE_NAME
כאשר PACKAGE_NAME הוא שם החבילה שרוצים לבדוק.
הפלט של הפקודה מכיל קטעים שנראים כך:
... runtime permissions: android.permission.POST_NOTIFICATIONS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED] android.permission.ACCESS_FINE_LOCATION: granted=false, flags=[ USER_SET|USER_FIXED|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED] android.permission.BLUETOOTH_CONNECT: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED] ...
הרשאות שנדחו על ידי המשתמש פעם אחת מסומנות על ידי USER_SET
.
הרשאות שנדחו באופן סופי על ידי בחירה באפשרות דחייה הן פעמיים
סומן על ידי USER_FIXED
.
במהלך הבדיקה, מומלץ לאפס את הסימונים האלה כדי לוודא שהבודקים לא מופתע כשתיבת הדו-שיח לא מופיעה. כדי לעשות את זה, משתמשים בפקודה:
adb shell pm clear-permission-flags PACKAGE_NAME PERMISSION_NAME user-set user-fixed
PERMISSION_NAME הוא שם ההרשאה שרוצים לקבל לאתחל. כדי להציג רשימה מלאה של ההרשאות הניתנות לאפליקציה ל-Android, אפשר לעבור לקישור הבא: Permissions API דף עזר.
מידע נוסף על טיפול בהרשאה באפליקציה שלכם.
שינויים בחלון ההתראות של המערכת
ב-Android 11 התבצעו כמה שינויים באופן שבו האפליקציות מקבלות
SYSTEM_ALERT_WINDOW
הרשאה. השינויים נועדו להגן על המשתמשים על ידי מתן ההרשאה
באופן מכוון יותר.
אפליקציות מסוימות מקבלות באופן אוטומטי הרשאת SYSTEM_ALERT_WINDOW לאחר בקשה
סוגים מסוימים של אפליקציות מקבלים באופן אוטומטי את המזהה SYSTEM_ALERT_WINDOW
הרשאה לפי בקשה:
כל אפליקציה שכוללת
ROLE_CALL_SCREENING
ושולח את הבקשהSYSTEM_ALERT_WINDOW
מקבל את ההרשאה באופן אוטומטי. אם המיקום האפליקציה מאבדת אתROLE_CALL_SCREENING
והיא מאבדת את ההרשאה.כל אפליקציה שמצלמת את המסך באמצעות
MediaProjection
ושולח את הבקשהSYSTEM_ALERT_WINDOW
מקבל את ההרשאה באופן אוטומטי אלא אם המשתמש דחה במפורש את ההרשאה לאפליקציה. כשהאפליקציה מפסיק לצלם את המסך, מאבד את ההרשאות. התרחיש לדוגמה הזה הוא בעיקר מיועד לאפליקציות סטרימינג של משחקים.
אין צורך לשלוח את האפליקציות האלה
ACTION_MANAGE_OVERLAY_PERMISSION
כדי לקבל את ההרשאה SYSTEM_ALERT_WINDOW
; האפליקציות יכולות פשוט לבקש
SYSTEM_ALERT_WINDOW
ישירות.
כוונות MANAGE_OVERLAY_permission תמיד מפנות את המשתמש למסך הרשאות המערכת
החל מ-Android 11,
ACTION_MANAGE_OVERLAY_PERMISSION
ה-Intent תמיד מפנה את המשתמש למסך הגדרות ברמה העליונה, שבו
משתמש יכול להעניק או לבטל
SYSTEM_ALERT_WINDOW
הרשאות לאפליקציות. המערכת מתעלמת מכל הנתונים של package:
ב-Intent.
בגרסאות קודמות של Android, ה-Intent ACTION_MANAGE_OVERLAY_PERMISSION
יכול לציין חבילה שתוביל את המשתמש למסך ספציפי לאפליקציה
לניהול ההרשאה. הפונקציונליות הזו אינה נתמכת החל מ-
Android 11. במקום זאת, המשתמשים צריכים לבחור קודם את האפליקציה שהם רוצים
להעניק או לבטל את ההרשאה. השינוי הזה נועד להגן על המשתמשים
בכך שהענקת ההרשאה תהיה מכוונת יותר.
מספרי טלפון
מערכת Android 11 משנה את ההרשאה שקשורה לטלפון באפליקציה משמש לקריאת מספרי טלפון.
אם האפליקציה מטרגטת את Android 11 ואילך והיא צריכה לגשת אל
ממשקי ה-API של מספרי טלפון שמוצגים ברשימה הבאה, עליכם לבקש
READ_PHONE_NUMBERS
במקום ההרשאה READ_PHONE_STATE
.
- ה-method
getLine1Number()
גם ב-TelephonyManager
וגםTelecomManager
בכיתה. - ה-method
getMsisdn()
שאינה נתמכת בTelephonyManager
בכיתה.
אם באפליקציה שלך מוצהר על READ_PHONE_STATE
לשימוש בשיטות קריאה שונות מאלה שצוינו
הרשימה הקודמת, אפשר להמשיך לבקש READ_PHONE_STATE
בכל הפריטים
גרסאות Android. אם משתמשים בהרשאה READ_PHONE_STATE
רק עבור
אך, ב-methods ברשימה הקודמת, עליכם לעדכן את קובץ המניפסט באופן הבא:
- צריך לשנות את ההצהרה לגבי
READ_PHONE_STATE
כך שהאפליקציה תשתמש ב רק ב-Android מגרסה 10 (API ברמה 29) ומטה. - מוסיפים את ההרשאה
READ_PHONE_NUMBERS
.
קטע הקוד הבא של הצהרת המניפסט מדגים את התהליך הזה:
<manifest> <!-- Grants the READ_PHONE_STATE permission only on devices that run Android 10 (API level 29) and lower. --> <uses-permission android:name="android.permission.READ_PHONE_STATE" android:maxSdkVersion="29" /> <uses-permission android:name="android.permission.READ_PHONE_NUMBERS" /> </manifest>
מקורות מידע נוספים
למידע נוסף על השינויים בהרשאות ב-Android 11, אפשר לעיין החומרים הבאים:
סרטונים
פיתוח בהתאם לשינויים האחרונים בתחום הפרטיות Android 11