مجوزهای برنامه را اعلام کنید

همانطور که در گردش کار برای استفاده از مجوزها ذکر شد، اگر برنامه شما مجوزهای برنامه را درخواست می کند، باید این مجوزها را در فایل مانیفست برنامه خود اعلام کنید. این اعلان‌ها به فروشگاه‌های برنامه و کاربران کمک می‌کنند مجموعه مجوزهایی را که برنامه شما ممکن است درخواست کند، درک کنند.

فرآیند درخواست مجوز به نوع مجوز بستگی دارد:

اعلامیه را به مانیفست برنامه اضافه کنید

برای اعلام مجوزی که ممکن است برنامه شما درخواست کند، عنصر مناسب <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 روی ۲۸ تنظیم کنید.