AppOpsManager
public
class
AppOpsManager
extends Object
| java.lang.Object | |
| ↳ | android.app.AppOpsManager |
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.
Summary
Nested classes | |
|---|---|
interface |
AppOpsManager.OnOpChangedListener
Callback for notification of changes to operation state. |
Constants | |
|---|---|
int |
MODE_ALLOWED
Result from |
int |
MODE_DEFAULT
Result from |
int |
MODE_ERRORED
Result from |
int |
MODE_FOREGROUND
Special mode that means "allow only when app is in foreground." This is not
returned from |
int |
MODE_IGNORED
Result from |
String |
OPSTR_ADD_VOICEMAIL
Required to access phone state related information. |
String |
OPSTR_ANSWER_PHONE_CALLS
Answer incoming phone calls |
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 |
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_PICTURE_IN_PICTURE
Access to picture-in-picture. |
String |
OPSTR_PROCESS_OUTGOING_CALLS
Access APIs for diverting outgoing calls |
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_NUMBERS
|
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. |
int |
WATCH_FOREGROUND_CHANGES
Flag for |
Public methods | |
|---|---|
int
|
checkOp(String op, int uid, String packageName)
This method was deprecated
in API level 29.
Renamed to |
int
|
checkOpNoThrow(String op, int uid, String packageName)
This method was deprecated
in API level 29.
Renamed to |
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 |
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 |
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 |
int
|
noteProxyOpNoThrow(String op, String proxiedPackageName, int proxiedUid)
Like |
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 |
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
|
startWatchingMode(String op, String packageName, int flags, 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 |
int
|
unsafeCheckOp(String op, int uid, String packageName)
Do a quick check for whether an application might be able to perform an operation. |
int
|
unsafeCheckOpNoThrow(String op, int uid, String packageName)
Like |
int
|
unsafeCheckOpRaw(String op, int uid, String packageName)
Like |
int
|
unsafeCheckOpRawNoThrow(String op, int uid, String packageName)
Like |
Inherited methods | |
|---|---|
Constants
MODE_ALLOWED
public static final 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.
Constant Value: 0 (0x00000000)
MODE_DEFAULT
public static final 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. 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)
MODE_ERRORED
public static final 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.
Constant Value: 2 (0x00000002)
MODE_FOREGROUND
public static final int MODE_FOREGROUND
Special mode that means "allow only when app is in foreground." This is not
returned from unsafeCheckOp(String, int, String), noteOp(String, int, String), startOp(String, int, String). Rather,
unsafeCheckOp(String, int, String) will always return MODE_ALLOWED (because it is always
possible for it to be ultimately allowed, depending on the app's background state),
and noteOp(String, int, String) and startOp(String, int, String) will return MODE_ALLOWED when the app
being checked is currently in the foreground, otherwise MODE_IGNORED.
The only place you will this normally see this value is through
unsafeCheckOpRaw(String, int, String), which returns the actual raw mode of the op. Note that because
you can't know the current state of the app being checked (and it can change at any
point), you can only treat the result here as an indication that it will vary between
MODE_ALLOWED and MODE_IGNORED depending on changes in the background
state of the app. You thus must always use noteOp(String, int, String) or startOp(String, int, String) to do
the actual check for access to the op.
Constant Value: 4 (0x00000004)
MODE_IGNORED
public static final 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).
Constant Value: 1 (0x00000001)
OPSTR_ADD_VOICEMAIL
public static final String OPSTR_ADD_VOICEMAIL
Required to access phone state related information.
Constant Value: "android:add_voicemail"
OPSTR_ANSWER_PHONE_CALLS
public static final String OPSTR_ANSWER_PHONE_CALLS
Answer incoming phone calls
Constant Value: "android:answer_phone_calls"
OPSTR_BODY_SENSORS
public static final String OPSTR_BODY_SENSORS
Access to body sensors such as heart rate, etc.
Constant Value: "android:body_sensors"
OPSTR_CALL_PHONE
public static final String OPSTR_CALL_PHONE
Allows an application to initiate a phone call.
Constant Value: "android:call_phone"
OPSTR_CAMERA
public static final String OPSTR_CAMERA
Required to be able to access the camera device.
Constant Value: "android:camera"
OPSTR_COARSE_LOCATION
public static final String OPSTR_COARSE_LOCATION
Access to coarse location information.
Constant Value: "android:coarse_location"
OPSTR_FINE_LOCATION
public static final String OPSTR_FINE_LOCATION
Access to fine location information.
Constant Value: "android:fine_location"
OPSTR_GET_USAGE_STATS
public static final String OPSTR_GET_USAGE_STATS
Access to UsageStatsManager.
Constant Value: "android:get_usage_stats"
OPSTR_MOCK_LOCATION
public static final String OPSTR_MOCK_LOCATION
Inject mock location into the system.
Constant Value: "android:mock_location"
OPSTR_MONITOR_HIGH_POWER_LOCATION
public static final String OPSTR_MONITOR_HIGH_POWER_LOCATION
Continually monitoring location data with a relatively high power request.
Constant Value: "android:monitor_location_high_power"
OPSTR_MONITOR_LOCATION
public static final String OPSTR_MONITOR_LOCATION
Continually monitoring location data.
Constant Value: "android:monitor_location"
OPSTR_PICTURE_IN_PICTURE
public static final String OPSTR_PICTURE_IN_PICTURE
Access to picture-in-picture.
Constant Value: "android:picture_in_picture"
OPSTR_PROCESS_OUTGOING_CALLS
public static final String OPSTR_PROCESS_OUTGOING_CALLS
Access APIs for diverting outgoing calls
Constant Value: "android:process_outgoing_calls"
OPSTR_READ_CALENDAR
public static final String OPSTR_READ_CALENDAR
Allows an application to read the user's calendar data.
Constant Value: "android:read_calendar"
OPSTR_READ_CALL_LOG
public static final String OPSTR_READ_CALL_LOG
Allows an application to read the user's call log.
Constant Value: "android:read_call_log"
OPSTR_READ_CELL_BROADCASTS
public static final String OPSTR_READ_CELL_BROADCASTS
Read previously received cell broadcast messages.
Constant Value: "android:read_cell_broadcasts"
OPSTR_READ_CONTACTS
public static final String OPSTR_READ_CONTACTS
Allows an application to read the user's contacts data.
Constant Value: "android:read_contacts"
OPSTR_READ_EXTERNAL_STORAGE
public static final String OPSTR_READ_EXTERNAL_STORAGE
Read external storage.
Constant Value: "android:read_external_storage"
OPSTR_READ_PHONE_NUMBERS
public static final String OPSTR_READ_PHONE_NUMBERS
Constant Value: "android:read_phone_numbers"
OPSTR_READ_PHONE_STATE
public static final String OPSTR_READ_PHONE_STATE
Required to access phone state related information.
Constant Value: "android:read_phone_state"
OPSTR_READ_SMS
public static final String OPSTR_READ_SMS
Allows an application to read SMS messages.
Constant Value: "android:read_sms"
OPSTR_RECEIVE_MMS
public static final String OPSTR_RECEIVE_MMS
Allows an application to receive MMS messages.
Constant Value: "android:receive_mms"
OPSTR_RECEIVE_SMS
public static final String OPSTR_RECEIVE_SMS
Allows an application to receive SMS messages.
Constant Value: "android:receive_sms"
OPSTR_RECEIVE_WAP_PUSH
public static final String OPSTR_RECEIVE_WAP_PUSH
Allows an application to receive WAP push messages.
Constant Value: "android:receive_wap_push"
OPSTR_RECORD_AUDIO
public static final String OPSTR_RECORD_AUDIO
Required to be able to access the microphone device.
Constant Value: "android:record_audio"
OPSTR_SEND_SMS
public static final String OPSTR_SEND_SMS
Allows an application to send SMS messages.
Constant Value: "android:send_sms"
OPSTR_SYSTEM_ALERT_WINDOW
public static final String OPSTR_SYSTEM_ALERT_WINDOW
Required to draw on top of other apps.
Constant Value: "android:system_alert_window"
OPSTR_USE_FINGERPRINT
public static final String OPSTR_USE_FINGERPRINT
Use the fingerprint API.
Constant Value: "android:use_fingerprint"
OPSTR_USE_SIP
public static final String OPSTR_USE_SIP
Access APIs for SIP calling over VOIP or WiFi
Constant Value: "android:use_sip"
OPSTR_WRITE_CALENDAR
public static final String OPSTR_WRITE_CALENDAR
Allows an application to write to the user's calendar data.
Constant Value: "android:write_calendar"
OPSTR_WRITE_CALL_LOG
public static final String OPSTR_WRITE_CALL_LOG
Allows an application to write to the user's call log.
Constant Value: "android:write_call_log"
OPSTR_WRITE_CONTACTS
public static final String OPSTR_WRITE_CONTACTS
Allows an application to write to the user's contacts data.
Constant Value: "android:write_contacts"
OPSTR_WRITE_EXTERNAL_STORAGE
public static final String OPSTR_WRITE_EXTERNAL_STORAGE
Write external storage.
Constant Value: "android:write_external_storage"
OPSTR_WRITE_SETTINGS
public static final String OPSTR_WRITE_SETTINGS
Required to write/modify/update system settingss.
Constant Value: "android:write_settings"
WATCH_FOREGROUND_CHANGES
public static final int WATCH_FOREGROUND_CHANGES
Flag for startWatchingMode(java.lang.String, java.lang.String, int, android.app.AppOpsManager.OnOpChangedListener):
Also get reports if the foreground state of an op's uid changes. This only works
when watching a particular op, not when watching a package.
Constant Value: 1 (0x00000001)
Public methods
checkOp
public int checkOp (String op, int uid, String packageName)
This method was deprecated
in API level 29.
Renamed to unsafeCheckOp(java.lang.String, int, java.lang.String).
| Parameters | |
|---|---|
op |
String: This value must never be null. |
uid |
int |
packageName |
String: This value must never be null. |
| Returns | |
|---|---|
int |
|
checkOpNoThrow
public int checkOpNoThrow (String op, int uid, String packageName)
This method was deprecated
in API level 29.
Renamed to unsafeCheckOpNoThrow(java.lang.String, int, java.lang.String).
| Parameters | |
|---|---|
op |
String: This value must never be null. |
uid |
int |
packageName |
String: This value must never be null. |
| Returns | |
|---|---|
int |
|
checkPackage
public void checkPackage (int uid,
String packageName)
Do a quick check to validate if a package name belongs to a UID.
| Parameters | |
|---|---|
uid |
int |
packageName |
String: This value must never be null. |
| Throws | |
|---|---|
SecurityException |
if the package name doesn't belong to the given UID, or if ownership cannot be verified. |
finishOp
public 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(java.lang.String, int, java.lang.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.
| Parameters | |
|---|---|
op |
String: This value must never be null. |
uid |
int |
packageName |
String: This value must never be null. |
noteOp
public int noteOp (String op, int uid, String packageName)
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 |
String: The operation to note. One of the OPSTR_* constants.
This value must never be null. |
uid |
int: The user id of the application attempting to perform the operation. |
packageName |
String: The name of the application attempting to perform the operation.
This value must never be null. |
| Returns | |
|---|---|
int |
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. |
noteOpNoThrow
public int noteOpNoThrow (String op, int uid, String packageName)
Like noteOp(String, int, String) but instead of throwing a SecurityException it
returns MODE_ERRORED.
| Parameters | |
|---|---|
op |
String: This value must never be null. |
uid |
int |
packageName |
String: This value must never be null. |
| Returns | |
|---|---|
int |
|
noteProxyOp
public int noteProxyOp (String op, String proxiedPackageName)
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 |
String: The operation to note. One of the OPSTR_* constants.
This value must never be null. |
proxiedPackageName |
String: The name of the application calling into the proxy application.
This value must never be null. |
| Returns | |
|---|---|
int |
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. |
noteProxyOpNoThrow
public int noteProxyOpNoThrow (String op, String proxiedPackageName)
Like noteProxyOp(java.lang.String, java.lang.String) but instead
of throwing a SecurityException it returns MODE_ERRORED.
This API requires the package with the proxiedPackageName to belongs to
Binder#getCallingUid().
| Parameters | |
|---|---|
op |
String: This value must never be null. |
proxiedPackageName |
String: This value must never be null. |
| Returns | |
|---|---|
int |
|
noteProxyOpNoThrow
public int noteProxyOpNoThrow (String op, String proxiedPackageName, int proxiedUid)
Like noteProxyOpNoThrow(java.lang.String, java.lang.String) but allows to specify the proxied uid.
This API requires package with the proxiedPackageName to belong to
proxiedUid.
| Parameters | |
|---|---|
op |
String: The op to note
This value must never be null. |
proxiedPackageName |
String: The package to note the op for or null if the op should be
noted for the "android" package
This value may be null. |
proxiedUid |
int: The uid the package belongs to |
| Returns | |
|---|---|
int |
|
permissionToOp
public static String permissionToOp (String permission)
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.
This API is intended to be used for mapping runtime
permissions to the corresponding app op.
| Parameters | |
|---|---|
permission |
String: The permission. |
| Returns | |
|---|---|
String |
The app op associated with the permission or null. |
startOp
public int startOp (String op, int uid, String packageName)
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(java.lang.String, int, java.lang.String) to report when the application is no
longer performing the operation.
| Parameters | |
|---|---|
op |
String: The operation to start. One of the OPSTR_* constants.
This value must never be null. |
uid |
int: The user id of the application attempting to perform the operation. |
packageName |
String: The name of the application attempting to perform the operation.
This value must never be null. |
| Returns | |
|---|---|
int |
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. |
startOpNoThrow
public int startOpNoThrow (String op, int uid, String packageName)
Like startOp(String, int, String) but instead of throwing a SecurityException it
returns MODE_ERRORED.
| Parameters | |
|---|---|
op |
String: This value must never be null. |
uid |
int |
packageName |
String: This value must never be null. |
| Returns | |
|---|---|
int |
|
startWatchingMode
public 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. You can watch op changes only for your UID.
| Parameters | |
|---|---|
op |
String: The operation to monitor, one of OPSTR_*.
This value must never be null. |
packageName |
String: The name of the application to monitor.
This value may be null. |
callback |
AppOpsManager.OnOpChangedListener: Where to report changes.
This value must never be null. |
startWatchingMode
public void startWatchingMode (String op, String packageName, int flags, AppOpsManager.OnOpChangedListener callback)
Monitor for changes to the operating mode for the given op in the given app package. You can watch op changes only for your UID.
| Parameters | |
|---|---|
op |
String: The operation to monitor, one of OPSTR_*.
This value must never be null. |
packageName |
String: The name of the application to monitor.
This value may be null. |
flags |
int: Option flags: any combination of WATCH_FOREGROUND_CHANGES or 0. |
callback |
AppOpsManager.OnOpChangedListener: Where to report changes.
This value must never be null. |
stopWatchingMode
public void stopWatchingMode (AppOpsManager.OnOpChangedListener callback)
Stop monitoring that was previously started with startWatchingMode(String, String, AppOpsManager.OnOpChangedListener). All
monitoring associated with this callback will be removed.
| Parameters | |
|---|---|
callback |
AppOpsManager.OnOpChangedListener: This value must never be null. |
unsafeCheckOp
public int unsafeCheckOp (String op, int uid, String packageName)
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(java.lang.String, int, java.lang.String)
or startOp(java.lang.String, int, java.lang.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.
Important things this will not do (which you need to ultimate use
noteOp(java.lang.String, int, java.lang.String) or startOp(java.lang.String, int, java.lang.String) to cover):
- Verifying the uid and package are consistent, so callers can't spoof their identity.
- Taking into account the current foreground/background state of the
app; apps whose mode varies by this state will always be reported
as
MODE_ALLOWED.
| Parameters | |
|---|---|
op |
String: The operation to check. One of the OPSTR_* constants.
This value must never be null. |
uid |
int: The user id of the application attempting to perform the operation. |
packageName |
String: The name of the application attempting to perform the operation.
This value must never be null. |
| Returns | |
|---|---|
int |
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. |
unsafeCheckOpNoThrow
public int unsafeCheckOpNoThrow (String op, int uid, String packageName)
Like checkOp(String, int, String) but instead of throwing a SecurityException it
returns MODE_ERRORED.
| Parameters | |
|---|---|
op |
String: This value must never be null. |
uid |
int |
packageName |
String: This value must never be null. |
| Returns | |
|---|---|
int |
|
unsafeCheckOpRaw
public int unsafeCheckOpRaw (String op, int uid, String packageName)
Like checkOp(String, int, String) but returns the raw mode associated with the op.
Does not throw a security exception, does not translate MODE_FOREGROUND.
| Parameters | |
|---|---|
op |
String: This value must never be null. |
uid |
int |
packageName |
String: This value must never be null. |
| Returns | |
|---|---|
int |
|
unsafeCheckOpRawNoThrow
public int unsafeCheckOpRawNoThrow (String op, int uid, String packageName)
Like unsafeCheckOpNoThrow(java.lang.String, int, java.lang.String) but returns the raw
mode associated with the op. Does not throw a security exception, does not translate
MODE_FOREGROUND.
| Parameters | |
|---|---|
op |
String: This value must never be null. |
uid |
int |
packageName |
String: This value must never be null. |
| Returns | |
|---|---|
int |
|
Content and code samples on this page are subject to the licenses described in the Content License. Java is a registered trademark of Oracle and/or its affiliates.