اندروید 11 به کاربران این امکان را می دهد که مجوزهای دقیق تری را برای مکان، میکروفون و دوربین مشخص کنند. بهعلاوه، سیستم مجوزهای برنامههای استفادهنشده را که Android 11 یا بالاتر را هدف قرار میدهند، بازنشانی میکند و برنامهها در صورت استفاده از پنجره هشدار سیستم یا خواندن اطلاعات مربوط به شماره تلفن، ممکن است نیاز داشته باشند مجوزهایی را که اعلام میکنند بهروزرسانی کنند.
مجوزهای یکبار مصرف
از Android 11 شروع میشود، هر زمان که برنامه شما مجوز مربوط به مکان، میکروفون یا دوربین را درخواست کند، کادر گفتگوی مجوزهای رو به روی کاربر دارای گزینهای به نام فقط این بار است. اگر کاربر این گزینه را در گفتگو انتخاب کند، به برنامه شما یک مجوز موقت یک بار اعطا می شود.
درباره نحوه مدیریت مجوزهای یک بار مصرف توسط سیستم بیشتر بیاموزید.
بازنشانی خودکار مجوزها از برنامه های استفاده نشده
اگر برنامه شما اندروید 11 یا بالاتر را هدف قرار می دهد و برای چند ماه از آن استفاده نمی شود، سیستم با بازنشانی خودکار مجوزهای زمان اجرا حساسی که کاربر به برنامه شما اعطا کرده است، از داده های کاربر محافظت می کند. این عمل همان اثری را دارد که اگر کاربر مجوزی را در تنظیمات سیستم مشاهده کرده و سطح دسترسی برنامه شما را به Deny تغییر دهد. اگر برنامه شما از بهترین روشها برای درخواست مجوز در زمان اجرا پیروی میکند، نیازی به ایجاد هیچ تغییری در برنامه خود ندارید. به این دلیل که وقتی کاربر با ویژگیهای برنامه شما تعامل دارد، باید تأیید کنید که ویژگیها مجوزهای مورد نیاز خود را دارند.
درباره نحوه بازنشانی خودکار مجوزهای برنامه های استفاده نشده توسط سیستم بیشتر بیاموزید.
قابلیت مشاهده گفتگوی مجوز
با شروع اندروید 11، اگر کاربر بیش از یک بار در طول نصب برنامه شما در دستگاهی، برای یک مجوز خاص روی رد کردن ضربه بزند، اگر برنامه شما دوباره آن مجوز را درخواست کند، کاربر گفتگوی مجوزهای سیستم را نمیبیند. عملکرد کاربر به معنای "دوباره نپرس" است. در نسخههای قبلی، هر بار که برنامه شما درخواست مجوز میکرد، کاربران کادر گفتگوی مجوزهای سیستم را میبینند، مگر اینکه کاربر قبلاً کادر یا گزینه «دوباره سؤال نشود» را انتخاب کرده باشد. این تغییر رفتار در اندروید 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، از صفحه مرجع 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
را درخواست میکند، بهطور خودکار مجوز اعطا میشود، مگر اینکه کاربر صراحتاً مجوز برنامه را رد کرده باشد. هنگامی که برنامه ضبط صفحه را متوقف می کند، مجوز را از دست می دهد. این مورد در درجه اول برای برنامه های پخش زنده بازی در نظر گرفته شده است.
این برنامه ها برای دریافت مجوز SYSTEM_ALERT_WINDOW
نیازی به ارسال ACTION_MANAGE_OVERLAY_PERMISSION
ندارند. برنامه ها به سادگی می توانند SYSTEM_ALERT_WINDOW
مستقیماً درخواست کنند.
اهداف MANAGE_OVERLAY_PERMISSION همیشه کاربر را به صفحه مجوزهای سیستم می آورد
با شروع Android 11، اهداف ACTION_MANAGE_OVERLAY_PERMISSION
همیشه کاربر را به صفحه تنظیمات سطح بالا میبرد، جایی که کاربر میتواند مجوزهای SYSTEM_ALERT_WINDOW
را برای برنامهها اعطا یا لغو کند. هر package:
داده های موجود در intent نادیده گرفته می شود.
در نسخههای قبلی اندروید، هدف ACTION_MANAGE_OVERLAY_PERMISSION
میتوانست بستهای را مشخص کند که کاربر را به صفحهای مخصوص برنامه برای مدیریت مجوز میبرد. این عملکرد در Android 11 پشتیبانی نمیشود. درعوض، کاربر ابتدا باید برنامهای را که میخواهد به آن اعطا یا لغو کند، انتخاب کند. هدف از این تغییر محافظت از کاربران با عمدیتر کردن اعطای مجوز است.
شماره های تلفن
Android 11 مجوز مربوط به تلفن را که برنامه شما هنگام خواندن شماره تلفن استفاده می کند، تغییر می دهد.
اگر برنامه شما Android 11 یا بالاتر را هدف قرار می دهد و نیاز به دسترسی به APIهای شماره تلفن نشان داده شده در لیست زیر دارد، باید به جای مجوز READ_PHONE_STATE
، مجوز READ_PHONE_NUMBERS
را درخواست کنید.
- متد
getLine1Number()
هم در کلاسTelephonyManager
و هم در کلاسTelecomManager
. - متد
getMsisdn()
پشتیبانی نشده در کلاسTelephonyManager
.
اگر برنامه شما READ_PHONE_STATE
برای فراخوانی روشهایی غیر از موارد موجود در لیست قبلی اعلام کرد، میتوانید به درخواست READ_PHONE_STATE
در همه نسخههای Android ادامه دهید. اگر از مجوز READ_PHONE_STATE
فقط برای روشهای فهرست قبلی استفاده میکنید، فایل مانیفست خود را بهصورت زیر بهروزرسانی کنید:
- اعلامیه
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، مطالب زیر را مشاهده کنید:
ویدیوها
در حال توسعه با آخرین تغییرات حریم خصوصی در اندروید 11