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_DEFAULT Result from checkOp(String, int, String), noteOp(String, int, String), startOp(String, int, String): the given caller should use its default security check.
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_ADD_VOICEMAIL Required to access phone state related information.
String OPSTR_BODY_SENSORS Access to body sensors such as heart rate, etc.
String OPSTR_CALL_PHONE Allows an application to initiate a phone call.
String OPSTR_CAMERA Required to be able to access the camera device.
String OPSTR_COARSE_LOCATION Access to coarse location information.
String OPSTR_FINE_LOCATION Access to fine location information.
String OPSTR_GET_USAGE_STATS Access to UsageStatsManager.
String OPSTR_MOCK_LOCATION Inject mock location into the system.
String OPSTR_MONITOR_HIGH_POWER_LOCATION Continually monitoring location data with a relatively high power request.
String OPSTR_MONITOR_LOCATION Continually monitoring location data.
String OPSTR_READ_CALENDAR Allows an application to read the user's calendar data.
String OPSTR_READ_CALL_LOG Allows an application to read the user's call log.
String OPSTR_READ_CELL_BROADCASTS Read previously received cell broadcast messages.
String OPSTR_READ_CONTACTS Allows an application to read the user's contacts data.
String OPSTR_READ_EXTERNAL_STORAGE Read external storage.
String OPSTR_READ_PHONE_STATE Required to access phone state related information.
String OPSTR_READ_SMS Allows an application to read SMS messages.
String OPSTR_RECEIVE_MMS Allows an application to receive MMS messages.
String OPSTR_RECEIVE_SMS Allows an application to receive SMS messages.
String OPSTR_RECEIVE_WAP_PUSH Allows an application to receive WAP push messages.
String OPSTR_RECORD_AUDIO Required to be able to access the microphone device.
String OPSTR_SEND_SMS Allows an application to send SMS messages.
String OPSTR_SYSTEM_ALERT_WINDOW Required to draw on top of other apps.
String OPSTR_USE_FINGERPRINT Use the fingerprint API.
String OPSTR_USE_SIP Access APIs for SIP calling over VOIP or WiFi
String OPSTR_WRITE_CALENDAR Allows an application to write to the user's calendar data.
String OPSTR_WRITE_CALL_LOG Allows an application to write to the user's call log.
String OPSTR_WRITE_CONTACTS Allows an application to write to the user's contacts data.
String OPSTR_WRITE_EXTERNAL_STORAGE Write external storage.
String OPSTR_WRITE_SETTINGS Required to write/modify/update system settingss.
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 noteProxyOp(String op, String proxiedPackageName)
Make note of an application performing an operation on behalf of another application when handling an IPC.
int noteProxyOpNoThrow(String op, String proxiedPackageName)
Like noteProxyOp(String, String) but instead of throwing a SecurityException it returns MODE_ERRORED.
static String permissionToOp(String permission)
Gets the app op name associated with a given permission.
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_DEFAULT

Added in API level 21

Result from checkOp(String, int, String), noteOp(String, int, String), startOp(String, int, String): the given caller should use its default security check. This mode is not normally used; it should only be used with appop permissions, and callers must explicitly check for it and deal with it.

Constant Value: 3 (0x00000003)

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_ADD_VOICEMAIL

Added in API level 23

Required to access phone state related information.

Constant Value: "android:add_voicemail"

public static final String OPSTR_BODY_SENSORS

Added in API level 23

Access to body sensors such as heart rate, etc.

Constant Value: "android:body_sensors"

public static final String OPSTR_CALL_PHONE

Added in API level 23

Allows an application to initiate a phone call.

Constant Value: "android:call_phone"

public static final String OPSTR_CAMERA

Added in API level 23

Required to be able to access the camera device.

Constant Value: "android:camera"

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_GET_USAGE_STATS

Added in API level 21

Access to UsageStatsManager.

Constant Value: "android:get_usage_stats"

public static final String OPSTR_MOCK_LOCATION

Added in API level 23

Inject mock location into the system.

Constant Value: "android:mock_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 static final String OPSTR_READ_CALENDAR

Added in API level 23

Allows an application to read the user's calendar data.

Constant Value: "android:read_calendar"

public static final String OPSTR_READ_CALL_LOG

Added in API level 23

Allows an application to read the user's call log.

Constant Value: "android:read_call_log"

public static final String OPSTR_READ_CELL_BROADCASTS

Added in API level 23

Read previously received cell broadcast messages.

Constant Value: "android:read_cell_broadcasts"

public static final String OPSTR_READ_CONTACTS

Added in API level 23

Allows an application to read the user's contacts data.

Constant Value: "android:read_contacts"

public static final String OPSTR_READ_EXTERNAL_STORAGE

Added in API level 23

Read external storage.

Constant Value: "android:read_external_storage"

public static final String OPSTR_READ_PHONE_STATE

Added in API level 23

Required to access phone state related information.

Constant Value: "android:read_phone_state"

public static final String OPSTR_READ_SMS

Added in API level 23

Allows an application to read SMS messages.

Constant Value: "android:read_sms"

public static final String OPSTR_RECEIVE_MMS

Added in API level 23

Allows an application to receive MMS messages.

Constant Value: "android:receive_mms"

public static final String OPSTR_RECEIVE_SMS

Added in API level 23

Allows an application to receive SMS messages.

Constant Value: "android:receive_sms"

public static final String OPSTR_RECEIVE_WAP_PUSH

Added in API level 23

Allows an application to receive WAP push messages.

Constant Value: "android:receive_wap_push"

public static final String OPSTR_RECORD_AUDIO

Added in API level 23

Required to be able to access the microphone device.

Constant Value: "android:record_audio"

public static final String OPSTR_SEND_SMS

Added in API level 23

Allows an application to send SMS messages.

Constant Value: "android:send_sms"

public static final String OPSTR_SYSTEM_ALERT_WINDOW

Added in API level 23

Required to draw on top of other apps.

Constant Value: "android:system_alert_window"

public static final String OPSTR_USE_FINGERPRINT

Added in API level 23

Use the fingerprint API.

Constant Value: "android:use_fingerprint"

public static final String OPSTR_USE_SIP

Added in API level 23

Access APIs for SIP calling over VOIP or WiFi

Constant Value: "android:use_sip"

public static final String OPSTR_WRITE_CALENDAR

Added in API level 23

Allows an application to write to the user's calendar data.

Constant Value: "android:write_calendar"

public static final String OPSTR_WRITE_CALL_LOG

Added in API level 23

Allows an application to write to the user's call log.

Constant Value: "android:write_call_log"

public static final String OPSTR_WRITE_CONTACTS

Added in API level 23

Allows an application to write to the user's contacts data.

Constant Value: "android:write_contacts"

public static final String OPSTR_WRITE_EXTERNAL_STORAGE

Added in API level 23

Write external storage.

Constant Value: "android:write_external_storage"

public static final String OPSTR_WRITE_SETTINGS

Added in API level 23

Required to write/modify/update system settingss.

Constant Value: "android:write_settings"

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 noteProxyOp (String op, String proxiedPackageName)

Added in API level 23

Make note of an application performing an operation on behalf of another application when handling an IPC. Note that you must pass the package name of the application that is being proxied while its UID will be inferred from the IPC state; this function will verify that the calling uid and proxied package name match, and if not, return MODE_IGNORED. If this call succeeds, the last execution time of the operation for the proxied app and your app will be updated to the current time.

Parameters
op The operation to note. One of the OPSTR_* constants.
proxiedPackageName The name of the application calling into the proxy application.
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 noteProxyOpNoThrow (String op, String proxiedPackageName)

Added in API level 23

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

public static String permissionToOp (String permission)

Added in API level 23

Gets the app op name associated with a given permission. The app op name is one of the public constants defined in this class such as OPSTR_COARSE_LOCATION.

Parameters
permission The permission.
Returns
  • The app op associated with the permission or null.

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.