Android APIs
public class

AppOpsManager

extends Object
java.lang.Object
   ↳ android.app.AppOpsManager

Class Overview

API for interacting with "application operation" tracking.

This API is not generally intended for third party application developers; most features are only available to system applications. Obtain an instance of it through Context.getSystemService with Context.APP_OPS_SERVICE.

Summary

Nested Classes
interface AppOpsManager.OnOpChangedListener Callback for notification of changes to operation state. 
Constants
int MODE_ALLOWED Result from checkOp(String, int, String), noteOp(String, int, String), startOp(String, int, String): the given caller is allowed to perform the given operation.
int MODE_ERRORED Result from checkOpNoThrow(String, int, String), noteOpNoThrow(String, int, String), startOpNoThrow(String, int, String): the given caller is not allowed to perform the given operation, and this attempt should cause it to have a fatal error, typically a SecurityException.
int MODE_IGNORED Result from checkOp(String, int, String), noteOp(String, int, String), startOp(String, int, String): the given caller is not allowed to perform the given operation, and this attempt should silently fail (it should not cause the app to crash).
String OPSTR_COARSE_LOCATION Access to coarse location information.
String OPSTR_FINE_LOCATION Access to fine location information.
String OPSTR_MONITOR_HIGH_POWER_LOCATION Continually monitoring location data with a relatively high power request.
String OPSTR_MONITOR_LOCATION Continually monitoring location data.
Public Methods
int checkOp(String op, int uid, String packageName)
Do a quick check for whether an application might be able to perform an operation.
int checkOpNoThrow(String op, int uid, String packageName)
Like checkOp(String, int, String) but instead of throwing a SecurityException it returns MODE_ERRORED.
void checkPackage(int uid, String packageName)
Do a quick check to validate if a package name belongs to a UID.
void finishOp(String op, int uid, String packageName)
Report that an application is no longer performing an operation that had previously been started with startOp(String, int, String).
int noteOp(String op, int uid, String packageName)
Make note of an application performing an operation.
int noteOpNoThrow(String op, int uid, String packageName)
Like noteOp(String, int, String) but instead of throwing a SecurityException it returns MODE_ERRORED.
int startOp(String op, int uid, String packageName)
Report that an application has started executing a long-running operation.
int startOpNoThrow(String op, int uid, String packageName)
Like startOp(String, int, String) but instead of throwing a SecurityException it returns MODE_ERRORED.
void startWatchingMode(String op, String packageName, AppOpsManager.OnOpChangedListener callback)
Monitor for changes to the operating mode for the given op in the given app package.
void stopWatchingMode(AppOpsManager.OnOpChangedListener callback)
Stop monitoring that was previously started with startWatchingMode(String, String, AppOpsManager.OnOpChangedListener).
[Expand]
Inherited Methods
From class java.lang.Object

Constants

public static final int MODE_ALLOWED

Added in API level 19

Result from checkOp(String, int, String), noteOp(String, int, String), startOp(String, int, String): the given caller is allowed to perform the given operation.

Constant Value: 0 (0x00000000)

public static final int MODE_ERRORED

Added in API level 19

Result from checkOpNoThrow(String, int, String), noteOpNoThrow(String, int, String), startOpNoThrow(String, int, String): the given caller is not allowed to perform the given operation, and this attempt should cause it to have a fatal error, typically a SecurityException.

Constant Value: 2 (0x00000002)

public static final int MODE_IGNORED

Added in API level 19

Result from checkOp(String, int, String), noteOp(String, int, String), startOp(String, int, String): the given caller is not allowed to perform the given operation, and this attempt should silently fail (it should not cause the app to crash).

Constant Value: 1 (0x00000001)

public static final String OPSTR_COARSE_LOCATION

Added in API level 19

Access to coarse location information.

Constant Value: "android:coarse_location"

public static final String OPSTR_FINE_LOCATION

Added in API level 19

Access to fine location information.

Constant Value: "android:fine_location"

public static final String OPSTR_MONITOR_HIGH_POWER_LOCATION

Added in API level 19

Continually monitoring location data with a relatively high power request.

Constant Value: "android:monitor_location_high_power"

public static final String OPSTR_MONITOR_LOCATION

Added in API level 19

Continually monitoring location data.

Constant Value: "android:monitor_location"

Public Methods

public int checkOp (String op, int uid, String packageName)

Added in API level 19

Do a quick check for whether an application might be able to perform an operation. This is not a security check; you must use noteOp(String, int, String) or startOp(String, int, String) for your actual security checks, which also ensure that the given uid and package name are consistent. This function can just be used for a quick check to see if an operation has been disabled for the application, as an early reject of some work. This does not modify the time stamp or other data about the operation.

Parameters
op The operation to check. One of the OPSTR_* constants.
uid The user id of the application attempting to perform the operation.
packageName The name of the application attempting to perform the operation.
Returns
  • Returns MODE_ALLOWED if the operation is allowed, or MODE_IGNORED if it is not allowed and should be silently ignored (without causing the app to crash).
Throws
SecurityException If the app has been configured to crash on this op.

public int checkOpNoThrow (String op, int uid, String packageName)

Added in API level 19

Like checkOp(String, int, String) but instead of throwing a SecurityException it returns MODE_ERRORED.

public void checkPackage (int uid, String packageName)

Added in API level 19

Do a quick check to validate if a package name belongs to a UID.

Throws
SecurityException if the package name doesn't belong to the given UID, or if ownership cannot be verified.

public void finishOp (String op, int uid, String packageName)

Added in API level 19

Report that an application is no longer performing an operation that had previously been started with startOp(String, int, String). There is no validation of input or result; the parameters supplied here must be the exact same ones previously passed in when starting the operation.

public int noteOp (String op, int uid, String packageName)

Added in API level 19

Make note of an application performing an operation. Note that you must pass in both the uid and name of the application to be checked; this function will verify that these two match, and if not, return MODE_IGNORED. If this call succeeds, the last execution time of the operation for this app will be updated to the current time.

Parameters
op The operation to note. One of the OPSTR_* constants.
uid The user id of the application attempting to perform the operation.
packageName The name of the application attempting to perform the operation.
Returns
  • Returns MODE_ALLOWED if the operation is allowed, or MODE_IGNORED if it is not allowed and should be silently ignored (without causing the app to crash).
Throws
SecurityException If the app has been configured to crash on this op.

public int noteOpNoThrow (String op, int uid, String packageName)

Added in API level 19

Like noteOp(String, int, String) but instead of throwing a SecurityException it returns MODE_ERRORED.

public int startOp (String op, int uid, String packageName)

Added in API level 19

Report that an application has started executing a long-running operation. Note that you must pass in both the uid and name of the application to be checked; this function will verify that these two match, and if not, return MODE_IGNORED. If this call succeeds, the last execution time of the operation for this app will be updated to the current time and the operation will be marked as "running". In this case you must later call finishOp(String, int, String) to report when the application is no longer performing the operation.

Parameters
op The operation to start. One of the OPSTR_* constants.
uid The user id of the application attempting to perform the operation.
packageName The name of the application attempting to perform the operation.
Returns
  • Returns MODE_ALLOWED if the operation is allowed, or MODE_IGNORED if it is not allowed and should be silently ignored (without causing the app to crash).
Throws
SecurityException If the app has been configured to crash on this op.

public int startOpNoThrow (String op, int uid, String packageName)

Added in API level 19

Like startOp(String, int, String) but instead of throwing a SecurityException it returns MODE_ERRORED.

public void startWatchingMode (String op, String packageName, AppOpsManager.OnOpChangedListener callback)

Added in API level 19

Monitor for changes to the operating mode for the given op in the given app package.

Parameters
op The operation to monitor, one of OPSTR_*.
packageName The name of the application to monitor.
callback Where to report changes.

public void stopWatchingMode (AppOpsManager.OnOpChangedListener callback)

Added in API level 19

Stop monitoring that was previously started with startWatchingMode(String, String, AppOpsManager.OnOpChangedListener). All monitoring associated with this callback will be removed.