Skip to content

Most visited

Recently visited

navigation

RequiresPermission

public abstract @interface RequiresPermission
implements Annotation

android.support.annotation.RequiresPermission


Denotes that the annotated element requires (or may require) one or more permissions.

Example of requiring a single permission:


   @RequiresPermission(Manifest.permission.SET_WALLPAPER)
   public abstract void setWallpaper(Bitmap bitmap) throws IOException;

   @RequiresPermission(ACCESS_COARSE_LOCATION)
   public abstract Location getLastKnownLocation(String provider);
 
Example of requiring at least one permission from a set:

   @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
   public abstract Location getLastKnownLocation(String provider);
 
Example of requiring multiple permissions:

   @RequiresPermission(allOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
   public abstract Location getLastKnownLocation(String provider);
 
Example of requiring separate read and write permissions for a content provider:

   @RequiresPermission.Read(@RequiresPermission(READ_HISTORY_BOOKMARKS))
   @RequiresPermission.Write(@RequiresPermission(WRITE_HISTORY_BOOKMARKS))
   public static final Uri BOOKMARKS_URI = Uri.parse("content://browser/bookmarks");
 

When specified on a parameter, the annotation indicates that the method requires a permission which depends on the value of the parameter. For example, consider android.app.Activity.startActivity(android.content.Intent):

public void startActivity(@RequiresPermission Intent intent) { ... }
 
Notice how there are no actual permission names listed in the annotation. The actual permissions required will depend on the particular intent passed in. For example, the code may look like this:
Intent intent = new Intent(Intent.ACTION_CALL);
   startActivity(intent);
 
and the actual permission requirement for this particular intent is described on the Intent name itself:

   @RequiresPermission(Manifest.permission.CALL_PHONE)
   public static final String ACTION_CALL = "android.intent.action.CALL";
 

Summary

Nested classes

@interface RequiresPermission.Read

Specifies that the given permission is required for read operations. 

@interface RequiresPermission.Write

Specifies that the given permission is required for write operations. 

Public methods

String[] allOf()

Specifies a list of permission names that are all required.

String[] anyOf()

Specifies a list of permission names where at least one is required

If specified, allOf() and value() must both be null.

boolean conditional()

If true, the permission may not be required in all cases (e.g.

String value()

The name of the permission that is required, if precisely one permission is required.

Inherited methods

From interface java.lang.annotation.Annotation

Public methods

allOf

String[] allOf ()

Specifies a list of permission names that are all required.

If specified, anyOf() and value() must both be null.

Returns
String[]

anyOf

String[] anyOf ()

Specifies a list of permission names where at least one is required

If specified, allOf() and value() must both be null.

Returns
String[]

conditional

boolean conditional ()

If true, the permission may not be required in all cases (e.g. it may only be enforced on certain platforms, or for certain call parameters, etc.

Returns
boolean

value

String value ()

The name of the permission that is required, if precisely one permission is required. If more than one permission is required, specify either allOf() or anyOf() instead.

If specified, anyOf() and allOf() must both be null.

Returns
String

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Follow Google Developers on WeChat

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience.
(Sep 2017 survey)