با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
همانطور که در گردش کار برای استفاده از مجوزها ذکر شد، اگر برنامه شما مجوزهای برنامه را درخواست می کند، باید این مجوزها را در فایل مانیفست برنامه خود اعلام کنید. این اعلانها به فروشگاههای برنامه و کاربران کمک میکنند مجموعه مجوزهایی را که برنامه شما ممکن است درخواست کند، درک کنند.
فرآیند درخواست مجوز به نوع مجوز بستگی دارد:
اگر مجوز یک مجوز زمان نصب باشد، مانند یک مجوز معمولی یا یک مجوز امضا، مجوز به طور خودکار در زمان نصب اعطا می شود.
اگر مجوز یک مجوز زمان اجرا یا مجوز ویژه است، و اگر برنامه شما روی دستگاهی نصب شده است که دارای Android نسخه 6.0 (سطح API 23) یا بالاتر است، باید خودتان مجوز زمان اجرا یا مجوز ویژه را درخواست کنید.
اعلامیه را به مانیفست برنامه اضافه کنید
برای اعلام مجوزی که ممکن است برنامه شما درخواست کند، عنصر مناسب <uses-permission> را در فایل مانیفست برنامه خود قرار دهید. برای مثال، برنامهای که نیاز به دسترسی به دوربین دارد این خط را در AndroidManifest.xml دارد:
برخی از مجوزها، مانند CAMERA ، به برنامه شما اجازه میدهد به قطعات سختافزاری دسترسی پیدا کند که فقط برخی از دستگاههای Android دارند. اگر برنامه شما یکی از این مجوزهای مرتبط با سخت افزار را اعلام کرد، در نظر بگیرید که آیا برنامه شما همچنان می تواند روی دستگاهی اجرا شود که آن سخت افزار را ندارد. در بیشتر موارد، سختافزار اختیاری است، بنابراین بهتر است همانطور که در قطعه کد زیر از یک فایل AndroidManifest.xml نشان داده شده است، با تنظیم android:required به false در اعلان <uses-feature> ، سختافزار را اختیاری اعلام کنید:
اگر سخت افزار را اختیاری اعلام کنید، ممکن است برنامه شما روی دستگاهی اجرا شود که آن سخت افزار را ندارد. برای بررسی اینکه آیا یک دستگاه سخت افزار خاصی دارد، از متد 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 روی ۲۸ تنظیم کنید.
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[null,null,["تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی."],[],[],null,["# Declare app permissions\n\nAs mentioned in the [workflow for using\npermissions](/training/basics/permissions#workflow), if your app requests app\npermissions, you must declare these permissions in your app's manifest file.\nThese declarations help app stores and users understand the set of permissions\nthat your app might request.\n\nThe process to request a permission depends on the type of\npermission:\n\n- If the permission is an [install-time\n permission](/guide/topics/permissions/overview#install-time), such as a normal permission or a signature permission, the permission is granted automatically at install time.\n- If the permission is a [runtime\n permission](/guide/topics/permissions/overview#runtime) or [special\n permission](/guide/topics/permissions/overview#special), and if your app is installed on a device that runs Android 6.0 (API level 23) or higher, you must request the [runtime permission](/training/permissions/requesting) or [special\n permission](/training/permissions/requesting-special) yourself.\n\n| **Caution:** Carefully consider which permissions to declare in your app's manifest. Add only the permissions that your app needs. For each permission that your app requests, make sure that it offers clear benefits to users and that the request is done in a way that's obvious to them.\n\nAdd declaration to app manifest\n-------------------------------\n\nTo declare a permission that your app might request, include the appropriate\n[`\u003cuses-permission\u003e`](/guide/topics/manifest/uses-permission-element) element in\nyour app's manifest file. For example, an app that needs to access the camera\nhas this line in `AndroidManifest.xml`: \n\n```xml\n\u003cmanifest ...\u003e\n \u003cuses-permission android:name=\"android.permission.CAMERA\"/\u003e\n \u003capplication ...\u003e\n ...\n \u003c/application\u003e\n\u003c/manifest\u003e\n```\n\nDeclare hardware as optional\n----------------------------\n\nSome permissions, such as\n[`CAMERA`](/reference/android/Manifest.permission#CAMERA), let your app\naccess pieces of hardware that only some Android devices have. If your app\ndeclares one of these [hardware-associated\npermissions](/guide/topics/manifest/uses-feature-element#permissions-features),\nconsider whether your app can still run on a device that doesn't have that\nhardware. In most cases, hardware is optional, so it's better to declare the\nhardware as optional by setting `android:required` to `false` in your\n[`\u003cuses-feature\u003e`](/guide/topics/manifest/uses-feature-element) declaration, as\nshown in the following code snippet from an `AndroidManifest.xml` file: \n\n```xml\n\u003cmanifest ...\u003e\n \u003capplication\u003e\n ...\n \u003c/application\u003e\n \u003cuses-feature android:name=\"android.hardware.camera\"\n android:required=\"false\" /\u003e\n\u003cmanifest\u003e\n```\n| **Caution:** If you don't set `android:required` to `false` in your `\u003cuses-feature\u003e` declaration, Android assumes that the hardware is required for your app to run. The system then [prevents some devices from being able to install your\n| app](/guide/topics/manifest/uses-feature-element#market-feature-filtering).\n\n### Determine hardware availability\n\nIf you declare hardware as optional, it's possible for your app to run on a\ndevice that doesn't have that hardware. To check whether a device has a specific\npiece of hardware, use the\n[`hasSystemFeature()`](/reference/android/content/pm/PackageManager#hasSystemFeature(java.lang.String))\nmethod, as shown in the following code snippet. If the hardware isn't available,\ngracefully disable that feature in your app. \n\n### Kotlin\n\n```kotlin\n// Check whether your app is running on a device that has a front-facing camera.\nif (applicationContext.packageManager.hasSystemFeature(\n PackageManager.FEATURE_CAMERA_FRONT)) {\n // Continue with the part of your app's workflow that requires a\n // front-facing camera.\n} else {\n // Gracefully degrade your app experience.\n}\n```\n\n### Java\n\n```java\n// Check whether your app is running on a device that has a front-facing camera.\nif (getApplicationContext().getPackageManager().hasSystemFeature(\n PackageManager.FEATURE_CAMERA_FRONT)) {\n // Continue with the part of your app's workflow that requires a\n // front-facing camera.\n} else {\n // Gracefully degrade your app experience.\n}\n```\n\nDeclare permissions by API level\n--------------------------------\n\nTo declare a permission only on devices that support runtime permissions---that\nis, devices that run Android 6.0 (API level 23) or higher---include the\n[`\u003cuses-permission-sdk-23\u003e`](/guide/topics/manifest/uses-permission-sdk-23-element)\nelement instead of the\n[`\u003cuses-permission\u003e`](/guide/topics/manifest/uses-permission-element) element.\n\nWhen using either of these elements, you can set the `maxSdkVersion` attribute\nto indicate that devices running a version of Android higher than\nthe specified value don't need a particular permission. This lets you\neliminate unnecessary permissions while still providing compatibility\nfor older devices.\n\nFor example, your app might show media content, such as photos\nor videos, that the user created while in your app. In this situation,\nyou don't need to use the\n[`READ_EXTERNAL_STORAGE`](https://developer.android.com/reference/android/Manifest.permission#READ_EXTERNAL_STORAGE)\npermission on devices that\nrun Android 10 (API level 29) or higher, as long as your app targets\nAndroid 10 or higher. However, for compatibility with older devices,\nyou can declare the `READ_EXTERNAL_STORAGE` permission and set the\n`android:maxSdkVersion` to 28."]]