اعلام اجازه‌های برنامه

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

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

  • اگر اجازه از نوع اجازه زمان نصب باشد، مثل اجازه معمول یا اجازه امضا، اجازه به‌طور خودکار در زمان نصب اعطا می‌شود.
  • اگر اجازه از نوع اجازه زمان اجرا یا اجازه ویژه است و اگر برنامه‌تان در دستگاهی نصب شده است که Android نسخه ۶.۰ (سطح میانای برنامه‌سازی کاربردی ۲۳) یا بالاتر را اجرا می‌کند، باید خودتان اجازه زمان اجرا یا اجازه ویژه را درخواست کنید.

افزودن اظهارنامه به مانیفست برنامه

برای اعلام اجازه‌ای که ممکن است برنامه‌تان درخواست کند، عنصر <uses-permission> مناسب را در فایل مانیفست برنامه‌تان اضافه کنید. برای مثال، برنامه‌ای که نیاز به دسترسی به دوربین دارد این خط را در AndroidManifest.xml دارد:

<manifest ...>
    <uses-permission android:name="android.permission.CAMERA"/>
    <application ...>
        ...
    </application>
</manifest>

اعلام کردن سخت‌افزار به‌عنوان اختیاری

برخی‌از اجازه‌ها، مثل CAMERA، به برنامه‌تان اجازه می‌دهند به بخش‌هایی از سخت‌افزار دسترسی داشته باشد که فقط برخی‌از دستگاه‌های Android دارند. اگر برنامه‌تان یکی از این اجازه‌های مرتبط با سخت‌افزار را اعلام می‌کند، بررسی کنید که آیا برنامه‌تان همچنان می‌تواند در دستگاهی که آن سخت‌افزار را ندارد اجرا شود یا نه. در بیشتر موارد، سخت‌افزار اختیاری است، بنابراین بهتر است سخت‌افزار را با تنظیم android:required روی false در اظهارنامه <uses-feature> به‌عنوان اختیاری اعلام کنید، همان‌طور که در تکه‌کد زیر از فایل AndroidManifest.xml نشان داده شده است:

<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.
}

اعلام کردن اجازه‌ها براساس سطح میانای برنامه‌سازی کاربردی

برای اعلام اجازه فقط در دستگاه‌هایی که از اجازه‌های زمان اجرا پشتیبانی می‌کنند—یعنی دستگاه‌هایی که Android نسخه ۶.۰ (سطح میانای برنامه‌سازی کاربردی ۲۳) یا بالاتر را اجرا می‌کنند—به‌جای عنصر <uses-permission>، عنصر <uses-permission-sdk-23> را اضافه کنید.

هنگام استفاده از هرکدام از این عناصر، می‌توانید مشخصه maxSdkVersion را تنظیم کنید تا نشان دهید دستگاه‌هایی که نسخه Android بالاتر از مقدار مشخص‌شده را اجرا می‌کنند به اجازه خاصی نیاز ندارند. این کار به شما امکان می‌دهد اجازه‌های غیرضروری را حذف کنید و درعین‌حال سازگاری با دستگاه‌های قدیمی‌تر را حفظ کنید.

برای مثال، برنامه‌تان ممکن است محتوای رسانه‌ای، مثل عکس یا ویدیو، را که کاربر درحین استفاده از برنامه‌تان ایجاد کرده است نشان دهد. در این شرایط، تا زمانی که برنامه‌تان Android نسخه ۱۰ یا بالاتر را هدف قرار می‌دهد، نیازی به استفاده از اجازه READ_EXTERNAL_STORAGE در دستگاه‌هایی که Android نسخه ۱۰ (سطح API‏ ۲۹) یا بالاتر را اجرا می‌کنند ندارید. بااین‌حال، برای سازگاری با دستگاه‌های قدیمی‌تر، می‌توانید اجازه READ_EXTERNAL_STORAGE را اعلام کنید و android:maxSdkVersion را روی ۲۸ تنظیم کنید.