<uses-permission>
Stay organized with collections
Save and categorize content based on your preferences.
Note: In some cases, the permissions that you request
through <uses-permission>
can affect how Google Play filters your
application. If you request a hardware-related permission, such as
CAMERA
, Google Play assumes that your
application requires the underlying hardware feature and filters the application
from devices that don't offer it.
To control filtering, always explicitly declare
hardware features in <uses-feature>
elements, rather than
relying on Google Play to "discover" the requirements in
<uses-permission>
elements. Then, if you want to disable
filtering for a particular feature, you can add a
android:required="false"
attribute to the
<uses-feature>
declaration.
For a list of permissions that imply
hardware features, see the documentation for the
<uses-feature>
element.
- syntax:
<uses-permission android:name="string"
android:maxSdkVersion="integer" />
- contained in:
<manifest>
- description:
- Specifies a system permission that the user must grant for
the app to operate correctly. The user grants permissions when the
application installs, on devices running Android 5.1 and lower, or while the app runs, on devices running Android 6.0 and higher.
For more information on permissions, see the
Permissions
section in the app manifest overview and the
Permissions on Android guide.
A list of permissions defined by the base platform is at
android.Manifest.permission
.
- attributes:
android:name
- The name of the permission. It can be a permission defined by the
application with the
<permission>
element, a permission defined by another application, or one of the
standard system permissions, such as
"android.permission.CAMERA"
or "android.permission.READ_CONTACTS"
. As these examples show,
a permission name typically includes the package name as a prefix.
android:maxSdkVersion
- The highest API level at which this permission is granted to your app.
Setting this attribute is useful if the permission your app requires is no longer needed beginning
at a certain API level.
For example, beginning with Android 4.4 (API level 19) it's no longer necessary for your app
to request the WRITE_EXTERNAL_STORAGE
permission to write to its own application-specific directories on external storage, which are
provided by getExternalFilesDir()
.
However,
the permission is required for API level 18 and lower. So you can declare that this
permission is needed only up to API level 18 with a declaration like the following:
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="18" />
This way, beginning with API level 19, the system no longer grants your app the
WRITE_EXTERNAL_STORAGE
permission.
Added in API level 19.
- introduced in:
- API level 1
- see also:
-
Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
Last updated 2025-02-10 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-02-10 UTC."],[],[],null,["# <uses-permission\u003e\n\n**Note:** In some cases, the permissions that you request\nthrough `\u003cuses-permission\u003e` can affect how Google Play filters your\napplication. If you request a hardware-related permission, such as\n`CAMERA`, Google Play assumes that your\napplication requires the underlying hardware feature and filters the application\nfrom devices that don't offer it.\n\nTo control filtering, always explicitly declare\nhardware features in `\u003cuses-feature\u003e` elements, rather than\nrelying on Google Play to \"discover\" the requirements in\n`\u003cuses-permission\u003e` elements. Then, if you want to disable\nfiltering for a particular feature, you can add a\n`android:required=\"false\"` attribute to the\n`\u003cuses-feature\u003e` declaration.\n\nFor a list of permissions that imply\nhardware features, see the documentation for the [`\u003cuses-feature\u003e`](/guide/topics/manifest/uses-feature-element#permissions-features) element.\n\nsyntax:\n:\n\n ```xml\n \u003cuses-permission android:name=\"string\"\n android:maxSdkVersion=\"integer\" /\u003e\n ```\n\ncontained in:\n: [\u003cmanifest\u003e](/guide/topics/manifest/manifest-element)\n\ndescription:\n\n: Specifies a system permission that the user must grant for the app to operate correctly. The user grants permissions when the application installs, on devices running Android 5.1 and lower, or while the app runs, on devices running Android 6.0 and higher.\u003cbr /\u003e\n\n\n For more information on permissions, see the\n [Permissions](/guide/topics/manifest/manifest-intro#perms)\n section in the app manifest overview and the\n [Permissions on Android](/guide/topics/permissions) guide.\n A list of permissions defined by the base platform is at\n [android.Manifest.permission](/reference/android/Manifest.permission).\n\nattributes:\n:\n\n `android:name`\n : The name of the permission. It can be a permission defined by the\n application with the [\u003cpermission\u003e](/guide/topics/manifest/permission-element)\n element, a permission defined by another application, or one of the\n standard system permissions, such as\n [\"android.permission.CAMERA\"](/reference/android/Manifest.permission#CAMERA)\n or [\"android.permission.READ_CONTACTS\"](/reference/android/Manifest.permission#READ_CONTACTS). As these examples show,\n a permission name typically includes the package name as a prefix.\n\n `android:maxSdkVersion`\n\n : The highest API level at which this permission is granted to your app. Setting this attribute is useful if the permission your app requires is no longer needed beginning at a certain API level.\u003cbr /\u003e\n\n For example, beginning with Android 4.4 (API level 19) it's no longer necessary for your app\n to request the [WRITE_EXTERNAL_STORAGE](/reference/android/Manifest.permission#WRITE_EXTERNAL_STORAGE)\n permission to write to its own application-specific directories on external storage, which are\n provided by [getExternalFilesDir()](/reference/android/content/Context#getExternalFilesDir(java.lang.String)).\n\n However,\n the permission *is required* for API level 18 and lower. So you can declare that this\n permission is needed only up to API level 18 with a declaration like the following: \n\n ```xml\n \u003cuses-permission\n android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"\n android:maxSdkVersion=\"18\" /\u003e\n ```\n\n This way, beginning with API level 19, the system no longer grants your app the\n `WRITE_EXTERNAL_STORAGE` permission.\n\n Added in API level 19.\n\nintroduced in:\n: API level 1\n\nsee also:\n:\n - [\u003cpermission\u003e](/guide/topics/manifest/permission-element)\n - [`\u003cuses-permission-sdk-23\u003e`](/guide/topics/manifest/uses-permission-sdk-23-element)\n - [\u003cuses-feature\u003e](/guide/topics/manifest/uses-feature-element)"]]