קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
הרשאה מיוחדת מגנה על הגישה למשאבי מערכת רגישים במיוחד או כאלה שלא קשורים ישירות לפרטיות המשתמש. הרשאות כאלה שונות מהרשאות שניתנות בזמן ההתקנה או בתחילת ההפעלה.
איור 1. המסך אפליקציות עם הרשאות גישה מיוחדות בהגדרות המערכת.
דוגמאות להרשאות מיוחדות:
תזמון התראות מדויקות.
הצגה וציור מעל אפליקציות אחרות.
גישה לכל נתוני האחסון.
אפליקציות שמצהירות על הרשאה מיוחדת מוצגות בדף אפליקציות עם הרשאות גישה מיוחדות בהגדרות המערכת (איור 1). כדי להעניק לאפליקציה הרשאה מיוחדת, המשתמש צריך לעבור לדף הזה: הגדרות > אפליקציות > אפליקציות עם הרשאות גישה מיוחדות.
מעצבים את חוויית השימוש באפליקציה כך שפעולות ספציפיות ישויכו להרשאות מיוחדות ספציפיות. חשוב להודיע למשתמשים אילו פעולות עשויות לדרוש שהם ייתנו לאפליקציה הרשאת גישה לנתונים פרטיים.
מחכים שהמשתמש יפעיל את המשימה או הפעולה באפליקציה שדורשת גישה לנתונים פרטיים ספציפיים. בשלב הזה, האפליקציה יכולה לבקש הרשאה מיוחדת לגשת לנתונים האלה.
בודקים אם המשתמש כבר נתן לאפליקציה את ההרשאה המיוחדת דורשת. כדי לעשות זאת, משתמשים בפונקציית הבדיקה המותאמת אישית של כל הרשאה. אם ההרשאה כבר ניתנה, האפליקציה יכולה לגשת לנתוני המשתמש הפרטיים. אם היא לא ניתנה, עוברים לשלב הבא. הערה: בכל פעם שמבצעים פעולה שנדרשת לה הרשאה, צריך לבדוק אם ההרשאה הזו כבר ניתנה.
מציגים נימוק ברכיב של ממשק המשתמש. צריך להסביר בצורה ברורה לאילו נתונים האפליקציה מנסה לגשת, ואילו יתרונות היא יכולה לתתת למשתמש אם הוא יעניק לה את ההרשאה המיוחדת. בנוסף, מכיוון שהאפליקציה מפנה את המשתמשים להגדרות המערכת כדי להעניק את ההרשאה, צריך לכלול גם הסבר קצר למשתמשים איך לעשות זאת. הנימוק צריך לכלול אפשרות ברורה לבטל את ההסכמה למתן ההרשאה. אחרי שהמשתמש מאשר שהוא הבין את הנימוק, ממשיכים לשלב הבא.
מבקשים את ההרשאה המיוחדת שהאפליקציה צריכה כדי לגשת לנתונים הפרטיים של המשתמש. בדרך כלל מדובר בכוונה לעבור לדף המתאים בהגדרות המערכת, שבו המשתמש יכול להעניק את ההרשאה. בניגוד להרשאות בתחילת ההפעלה, לא מוצגת תיבת דו-שיח קופצת לבקשת הרשאה.
בודקים את התשובה של המשתמש – אם הוא בחר להעניק או לדחות את ההרשאה המיוחדת – בשיטה onResume().
איור 2. תהליך העבודה להצהרה ובקשה של הרשאות מיוחדות ב-Android.
בקשת הרשאות מיוחדות
בניגוד להרשאות בתחילת ההפעלה, המשתמש צריך להעניק הרשאות מיוחדות מהדף אפליקציות עם הרשאות גישה מיוחדות בהגדרות המערכת. אפליקציות יכולות לשלוח משתמשים לשם באמצעות כוונה (intent), שמשהה את האפליקציה ומפעילה את דף ההגדרות המתאים להרשאה מיוחדת מסוימת.
אחרי שהמשתמש חוזר לאפליקציה, האפליקציה יכולה לבדוק אם ההרשאה ניתנה בפונקציה onResume().
valalarmManager=getSystemService<AlarmManager>()!!when{// if permission is granted, proceed with scheduling exact alarms…alarmManager.canScheduleExactAlarms()->{alarmManager.setExact(...)}else->{// ask users to grant the permission in the corresponding settings pagestartActivity(Intent(ACTION_REQUEST_SCHEDULE_EXACT_ALARM))}}
קוד לדוגמה לבדיקת ההרשאה ולטיפול בהחלטות של המשתמשים ב-onResume():
overridefunonResume(){// ...if(alarmManager.canScheduleExactAlarms()){// proceed with the action (setting exact alarms)alarmManager.setExact(...)}else{// permission not yet approved. Display user notice and gracefully degradeyourappexperience.alarmManager.setWindow(...)}}
שיטות מומלצות וטיפים
בקטעים הבאים מפורטות כמה שיטות מומלצות ושיקולים שכדאי לקחת בחשבון כשמבקשים הרשאות מיוחדות.
בדומה להרשאות בתחילת ההפעלה, אפליקציות צריכות לבקש הרשאות מיוחדות בהקשר המתאים, כשהמשתמש מבקש לבצע פעולה ספציפית שנדרשת לה הרשאה. לדוגמה, כדאי להמתין עם בקשת ההרשאה SCHEDULE_EXACT_ALARMS עד שהמשתמש יתזמן שליחת אימייל לשעה ספציפית.
הסבר על הבקשה
צריך לספק הסבר לפני שמפנים להגדרות המערכת. המשתמשים יוצאים מהאפליקציה באופן זמני כדי להעניק הרשאות מיוחדות. לכן צריך להציג רכיב של הסבר בתוך האפליקציה לפני שמפעילים את הכוונה לעבור לדף אפליקציות עם הרשאות גישה מיוחדות בהגדרות המערכת. הרכיב הזה צריך להסביר באופן ברור למה האפליקציה צריכה את ההרשאה ואיך צריך להעניק אותה בדף ההגדרות.
דוגמאות התוכן והקוד שבדף הזה כפופות לרישיונות המפורטים בקטע רישיון לתוכן. Java ו-OpenJDK הם סימנים מסחריים או סימנים מסחריים רשומים של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2025-08-27 (שעון UTC).
[[["התוכן קל להבנה","easyToUnderstand","thumb-up"],["התוכן עזר לי לפתור בעיה","solvedMyProblem","thumb-up"],["סיבה אחרת","otherUp","thumb-up"]],[["חסרים לי מידע או פרטים","missingTheInformationINeed","thumb-down"],["התוכן מורכב מדי או עם יותר מדי שלבים","tooComplicatedTooManySteps","thumb-down"],["התוכן לא עדכני","outOfDate","thumb-down"],["בעיה בתרגום","translationIssue","thumb-down"],["בעיה בדוגמאות/בקוד","samplesCodeIssue","thumb-down"],["סיבה אחרת","otherDown","thumb-down"]],["עדכון אחרון: 2025-08-27 (שעון UTC)."],[],[],null,["A *special permission* guards access to system resources that are particularly\nsensitive or not directly related to user privacy. These permissions are\ndifferent than [install-time\npermissions](/guide/topics/permissions/overview#install-time) and [runtime\npermissions](/guide/topics/permissions/overview#runtime). \n**Figure 1.** The **Special app access** screen in system settings.\n\nSome examples of special permissions include:\n\n- Scheduling exact alarms.\n- Displaying and drawing over other apps.\n- Accessing all storage data.\n\nApps that declare a special permission are shown in the **Special app access**\npage in system settings (figure 1). To grant a special permission to the app, a\nuser must navigate to this page: **Settings \\\u003e Apps \\\u003e Special app access**.\n| **Note:** Special permissions should be only used in specific use cases, and there may be policy implications to adding them in your app,\n\nWorkflow\n\nTo request a special permission, do the following:\n\n1. In your app's manifest file, [declare the special\n permissions](/training/permissions/declaring) that your app might need to request.\n2. Design your app's UX so that specific actions in your app are associated with specific special permissions. Let users know which actions might require them to grant permission for your app to access private user data.\n3. [Wait for the user](/training/permissions/requesting#principles) to invoke the task or action in your app that requires access to specific private user data. At that time, your app can request the special permission that's required for accessing that data.\n4. Check whether the user has already granted the special permission that your app requires. To do so, use each permission's [custom checking\n function](#check-method). If granted, your app can access the private user data. If not, continue to the next step. Note: You must check whether you have the permission every time you perform an operation that requires that permission.\n5. [Present a rationale](#explain) to the user in a UI element that clearly explains what data your app is trying to access and what benefits the app can provide to the user if they grant the special permission. In addition, since your app sends users to system settings to grant the permission, also include brief instructions that explain how users can grant the permission there. The rationale UI should provide a clear option for the user to opt-out of granting the permission. After the user acknowledges the rationale, continue to the next step.\n6. [Request the special permission](#request) that your app requires to access the private user data. This likely involves an intent to the corresponding page in system settings where the user can grant the permission. Unlike [runtime permissions](/guide/topics/permissions/overview#runtime), there is no popup permission dialog.\n7. Check the user's response -- whether they chose to grant or deny the special permission -- in the `onResume()` method.\n8. If the user granted the permission to your app, you can access the private user data. If the user denied the permission instead, [gracefully degrade\n your app experience](/training/permissions/requesting#handle-denial) so that it provides functionality to the user without the information that's protected by that permission.\n\n**Figure 2.** Workflow for declaring and requesting special permissions on Android.\n\nRequest special permissions\n\nUnlike [runtime permissions](/guide/topics/permissions/overview#runtime), the\nuser must grant special permissions from the **Special App Access** page in\nsystem settings. Apps can send users there using an intent, which pauses the app\nand launches the corresponding settings page for a given special permission.\nAfter the user returns to the app, the app can check if the permission has been\ngranted in the `onResume()` function.\n\nThe following sample code shows how to request the\n[`SCHEDULE_EXACT_ALARMS`](/reference/android/Manifest.permission#SCHEDULE_EXACT_ALARM)\nspecial permission from users: \n\n val alarmManager = getSystemService\u003cAlarmManager\u003e()!!\n when {\n // if permission is granted, proceed with scheduling exact alarms...\n alarmManager.canScheduleExactAlarms() -\u003e {\n alarmManager.setExact(...)\n }\n else -\u003e {\n // ask users to grant the permission in the corresponding settings page\n startActivity(Intent(ACTION_REQUEST_SCHEDULE_EXACT_ALARM))\n }\n }\n\nSample code to check the permission and handle user decisions in `onResume()`: \n\n override fun onResume() {\n // ...\n\n if (alarmManager.canScheduleExactAlarms()) {\n // proceed with the action (setting exact alarms)\n alarmManager.setExact(...)\n }\n else {\n // permission not yet approved. Display user notice and gracefully degrade\n your app experience.\n alarmManager.setWindow(...)\n }\n }\n\nBest practices and tips\n\nThe following sections provide some best practices and considerations when\nrequesting special permissions.\n\nEach permission has its own check method\n\nSpecial permissions operate differently than [runtime\npermissions](/training/permissions/requesting#request-permission). Instead,\nrefer to the [permissions API reference\npage](/reference/android/Manifest.permission) and use the custom access check\nfunctions for each special permission. Examples include\n[`AlarmManager#canScheduleExactAlarms()`](/reference/android/app/AlarmManager#canScheduleExactAlarms())\nfor the\n[`SCHEDULE_EXACT_ALARMS`](/reference/android/Manifest.permission#SCHEDULE_EXACT_ALARM)\npermission and\n[`Environment#isExternalStorageManager()`](/reference/android/os/Environment#isExternalStorageManager())\nfor the\n[`MANAGE_EXTERNAL_STORAGE`](/reference/android/Manifest.permission#MANAGE_EXTERNAL_STORAGE)\npermission.\n\nRequest in-context\n\nSimilar to runtime permissions, apps should request special permissions\nin-context when the user requests a specific action that requires the\npermission. For example, wait to request the `SCHEDULE_EXACT_ALARMS` permission\nuntil the user schedules an email to be sent at a specific time.\n\nExplain the request\n\nProvide a rationale before redirecting to system settings. Since users leave the\napp temporarily to grant special permissions, show an in-app UI before you\nlaunch the intent to the **Special App Access** page in system settings. This UI\nshould clearly explain why the app needs the permission and how the user should\ngrant it on the settings page."]]