بروزرسانی مجوز ها در اندروید 11
اندروید 11 به کاربران امکان می دهد مجوزهای دقیق بیشتری را برای مکان ، میکروفون و دوربین تعیین کنند. علاوه بر این، سیستم مجوزهای برنامه های بلا استفاده را که اندروید 11 یا بالاتر را هدف قرار می دهند، بازنشانی می کند ممکن است برنامه هایی که کارهایشان را در پس زمینه انجام میدهند نیز در این لیست قرار بگیرند پس هن. اگر آنها از پنجره هشدار سیستم استفاده می کنند یا اطلاعات مربوط به شماره تلفن ها را می خوانند ممکن است برنامه ها نیاز داشته باشند مجوز هایشان را برای بروز کردن مجدد اعلام کنند.
مجوز های یک بار مصرف
در اندروید 11 شروع شده است که هر زمانی که اپلیکیشن ما به مجوز هایی مانند دوربین, لوکیشن, میکروفن نیاز داشته باشد باید یک دیالوگ که شامل اطلاعات مربوط به مجوز می باشد را به کاربر نمایش بدهیم و از او درخواست کنیم که این مجوز را برای یک بار به برنامه ی ما بدهد, بعد از استفاده یک بار از مجوز دیگر قادر به استفاده از آن قابلیت را نداریم تا مجدد همان درخواست را از کاربر داشته باشیم. درباره نحوه هندل کردن مجوزه ای یک بار مصرف بزودی مقاله ای همراه با فیلم آموزشی آن منتشر خواهیم (شاید در زمانی که دارید مطالعه میکنید این آموزش ها منتشر شده باشد).
نکته : اگر برنامه شما در حال حاضر از درخواست مجوز ران تایم استفاده میکند نیازی ندارید که برنامه خود را تغییر بدهید تا از این قابلیت پشتیبانی بکند.
بازنشانی مجوز ها در برنامه های بلا استفاده
اگر برنامه شما اندروید 11 یا بالاتر را هدف قرار داده باشد و مدت زیادی از استفاده آن در سیستم گذشته باشد, سیستم به طور خودکار مجوز های حساسی را که کاربر به شما اعطا کرده است را بازنشانی میکند تا از داده های کاربر محافظت کند. این عمل دقیقا همان تاثیری را دارد که زمانی که شما از کاربر درخواست مجوز میکنید و کاربر بر روی دکمه deny یا همان عدم اعطا کلیک میکند. در صورتی که برنامه شما از درخواست مجوز ران تایم استفاده میکند نیازی نیست تغییر در اپلیکیشن خود ایجاد کنید چرا که کاربر از موضوع اپلیکیشن شما می داند که چه ویژگی هایی دارد و شما نیز با استفاده از درخواست مجوز به کاربر می فهمانید که این ویژگی ها نیاز به مجوز دسترسی دارند.
نکته : سیستم فقط مجوز های زمان اجرا را بازنشانی میکنند, هر مجوزی که هنگام اجرای اپلیکیشن نیاز است که از کاربر درخواست کنیم و این درخواست به صورت دیالوگ نمایش داده میشود را شامل میشود.
نمایان شدن دیالوگ مجوز
تغییرات پنجره هشدار سیستم
در اندروید 11 چند تغییر برای درخواست اعطای مجوز SYSTEM_ALERT_WINDOW به وجود آمده است, این تغییرات برای محافظت از کاربران در نظر گرفته شده است تا بتوانند دسترسی مجوز را طوری به برنامه بدهند که خودشان متوجه شوند.
به برخی از برنامه های خاص به طور خودکار و بدون درخواست آنها مجوز SYSTEM_ALERT_WINDOW اعطا می شود.
برخی از کلاس ها یا برنامه هایی که بدون درخواست, مجوز SYSTEM_ALERT_WINDOW برایشان صادر میشود :
- هر برنامه ای که مجوز ROLE_CALL_SCREENING را دارا باشد, هنگام درخواست مجوز SYSTEM_ALERT_WINDOW, این مجوز به طوری اتوماتیک برای آن اعطا میشود و بلعکس.
- هر برنامه ای که از صفحه نمایش با استفاده از MediaProjection فیلم برداری میکند, و در خواست مجوز SYSTEM_ALERT_WINDOW را داشته باشد سیستم این مجوز را به صورت اتوماتیک برایش اعطا میکند مگر اینکه خود کاربر صراحتا این محوز را رد کرده باشد. اگر برنامه فیلم برداری را متوقف کند دیگر این مجوز به اپلیکیشن داده نمیشود. به گفته گوگل این مورد استفاده, در درجه اول برای برنامه های پخش زنده بازی در نظر گرفته شده است.
این برنامه ها نیاز نیست برای دریافت مجوز SYSTEM_ALERT_WINDOW درخواست مجوز ACTION_MANAGE_OVERLAY_PERMISSION را بدهند, برنامه ها می توانند به طور مستقیم درخواست مجوز SYSTEM_ALERT_WINDOW را بدهند.
intent درخواست MANAGE_OVERLAY_PERMISSION همیشه کاربر را مستقیم به صفحه مجوزهای سیستم منتقل میکند.
در اندروید 11 با استفاده از intent مربوط به ACTION_MANAGE_OVERLAY_PERMISSION کاربر به صفحه اول تنظیمات منتقل میکند, جایی که کاربر میتواند مجوز های SYSTEM_ALERT_WINDOW را برای تمامی برنامه هایی که این مجوز را نیاز دارند, اعطا یا رد کند. در این intent دیگر نمی تواند package برنامه ی مورد نظر را وارد کنید, چرا که هر package ارسال شود سیستم آن را نادیده میگیرد.
در نسخه های قدیم اندروید با استفاده از intent مربوط به ACTION_MANAGE_OVERLAY_PERMISSION می توانیم package برنامه ی خاصی را در نظر بگیریم تا تنظیمات آن اپلیکیشن به تنهایی نمایش داده شود اما این عملکرد دیگر در اندروید 11 پشتیبانی نمیشود به جای آن کاربر باید برنامه ای را که میخواهد به آن مجوز بدهید یا از آن مجوز را بگیرد را انتخاب کند. این کار برای حفاظت از کاربر انجام شده است که کاربر در اعطا مجوز کاملا هوشیار باشد.
شماره تلفن ها
اندروید 11 مجوز مربوط به تلفن را هنگامی که قصد خواندن شماره تلفن داشته باشیم تغییر میدهد.
- متد getLine1Number() در هر دو کلاس TelephonyManager و TelecomManager.
- متد پشتیبانی نشده getMsisdn() در کلاس TelephonyManager.
اگر برنامه شما درخواست مجوز READ_PHONE_STATE را برای کار هایی به غیر از کارهای موجود در لیست بالا دارد, شما میتوانید این درخواست را در هر نسخه ای از اندروید داشته باشید. اگر شما از READ_PHONE_STATE برای انجام کارهایی که در لیست پایین آمده است درخواست میکنید, باید فایل AndroidManifest خود را مثل کد های پایین بروز کنید:
- درخواست مجوز READ_PHONE_STATE در اندروید 10 یا پایین تر ارسال شود و از آن استفاده شود.
- افزودن مجوز READ_PHONE_NUMBERS
کد های زیر به شما این امکان را میدهد که دو موضوع زیر را در مانیفیست خود اعمال کنید :
<manifest> <!-- درخواست اعطای مجوز READ_PHONE_STATE در اندروید 10 یا پایین تر ارسال میشود. --> <uses-permission android:name="android.permission.READ_PHONE_STATE" android:maxSdkVersion="29" /> <uses-permission android:name="android.permission.READ_PHONE_NUMBERS" /> </manifest>