همانطور که در گردش کار برای استفاده از مجوزها ذکر شد، اگر برنامه شما مجوزهای برنامه را درخواست می کند، باید این مجوزها را در فایل مانیفست برنامه خود اعلام کنید. این اعلانها به فروشگاههای برنامه و کاربران کمک میکنند مجموعه مجوزهایی را که برنامه شما ممکن است درخواست کند، درک کنند.
فرآیند درخواست مجوز به نوع مجوز بستگی دارد:
- اگر مجوز یک مجوز زمان نصب باشد، مانند یک مجوز معمولی یا یک مجوز امضا، مجوز به طور خودکار در زمان نصب اعطا می شود.
- اگر مجوز یک مجوز زمان اجرا یا مجوز ویژه است، و اگر برنامه شما روی دستگاهی نصب شده است که دارای Android نسخه 6.0 (سطح API 23) یا بالاتر است، باید خودتان مجوز زمان اجرا یا مجوز ویژه را درخواست کنید.
اعلامیه را به مانیفست برنامه اضافه کنید
برای اعلام مجوزی که ممکن است برنامه شما درخواست کند، عنصر مناسب <uses-permission>
را در فایل مانیفست برنامه خود قرار دهید. برای مثال، برنامهای که نیاز به دسترسی به دوربین دارد این خط را در AndroidManifest.xml
دارد:
<manifest ...> <uses-permission android:name="android.permission.CAMERA"/> <application ...> ... </application> </manifest>
سخت افزار را اختیاری اعلام کنید
برخی از مجوزها، مانند CAMERA
، به برنامه شما اجازه میدهد به قطعات سختافزاری دسترسی پیدا کند که فقط برخی از دستگاههای Android دارند. اگر برنامه شما یکی از این مجوزهای مرتبط با سخت افزار را اعلام کرد، در نظر بگیرید که آیا برنامه شما همچنان می تواند روی دستگاهی اجرا شود که آن سخت افزار را ندارد. در بیشتر موارد، سختافزار اختیاری است، بنابراین بهتر است همانطور که در قطعه کد زیر از یک فایل AndroidManifest.xml
نشان داده شده است، با تنظیم android:required
به false
در اعلان <uses-feature>
، سختافزار را اختیاری اعلام کنید:
<manifest ...> <application> ... </application> <uses-feature android:name="android.hardware.camera" android:required="false" /> <manifest>
در دسترس بودن سخت افزار را تعیین کنید
اگر سخت افزار را اختیاری اعلام کنید، ممکن است برنامه شما روی دستگاهی اجرا شود که آن سخت افزار را ندارد. برای بررسی اینکه آیا یک دستگاه سخت افزار خاصی دارد، از متد hasSystemFeature()
استفاده کنید، همانطور که در قطعه کد زیر نشان داده شده است. اگر سختافزار در دسترس نیست، بهخوبی آن ویژگی را در برنامهتان غیرفعال کنید.
کاتلین
// Check whether your app is running on a device that has a front-facing camera. if (applicationContext.packageManager.hasSystemFeature( PackageManager.FEATURE_CAMERA_FRONT)) { // Continue with the part of your app's workflow that requires a // front-facing camera. } else { // Gracefully degrade your app experience. }
جاوا
// Check whether your app is running on a device that has a front-facing camera. if (getApplicationContext().getPackageManager().hasSystemFeature( PackageManager.FEATURE_CAMERA_FRONT)) { // Continue with the part of your app's workflow that requires a // front-facing camera. } else { // Gracefully degrade your app experience. }
مجوزها را بر اساس سطح API اعلام کنید
برای اعلام مجوز فقط در دستگاههایی که از مجوزهای زمان اجرا پشتیبانی میکنند - یعنی دستگاههایی که Android نسخه 6.0 (سطح API 23) یا بالاتر را اجرا میکنند - به جای عنصر <uses-permission>
، عنصر <uses-permission-sdk-23>
را در نظر بگیرید.
هنگام استفاده از هر یک از این عناصر، میتوانید ویژگی maxSdkVersion
را طوری تنظیم کنید که نشان دهد دستگاههایی که از نسخه Android بالاتر از مقدار مشخص شده استفاده میکنند، به مجوز خاصی نیاز ندارند. این به شما امکان می دهد مجوزهای غیر ضروری را حذف کنید و در عین حال سازگاری را برای دستگاه های قدیمی تر فراهم کنید.
به عنوان مثال، برنامه شما ممکن است محتوای رسانهای مانند عکسها یا ویدیوها را که کاربر هنگام حضور در برنامه شما ایجاد کرده است را نشان دهد. در این شرایط، تا زمانی که برنامه شما Android 10 یا بالاتر را هدف قرار میدهد، نیازی به استفاده از مجوز READ_EXTERNAL_STORAGE
در دستگاههای دارای Android 10 (سطح API 29) یا بالاتر ندارید. با این حال، برای سازگاری با دستگاههای قدیمیتر، میتوانید مجوز READ_EXTERNAL_STORAGE
را اعلام کنید و android:maxSdkVersion
روی ۲۸ تنظیم کنید.