# Print output for @column tags ?>
public
class
AppOpsManager
extends Object
java.lang.Object | |
↳ | android.app.AppOpsManager |
App-ops are used for two purposes: Access control and tracking.
App-ops cover a wide variety of functionality from helping with runtime permissions access control and tracking to battery consumption tracking.
App-ops can either be controlled for each uid or for each package. Which one is used depends on the API provider maintaining this app-op. For any security or privacy related app-op the provider needs to control the app-op for per uid as all security and privacy is based on uid in Android.
To control access the app-op can be set to a mode to:
MODE_DEFAULT
MODE_ALLOWED
MODE_IGNORED
MODE_ERRORED
SecurityException
on access. This can be suppressed by using a
...noThrow
method to check the mode
API providers need to check the mode returned by noteOp(String, int, String)
if they are are allowing
access to operations gated by the app-op. unsafeCheckOp(String, int, String)
should be used to check the
mode if no access is granted. E.g. this can be used for displaying app-op state in the UI or
when checking the state before later calling noteOp(String, int, String)
anyway.
If an operation refers to a time span (e.g. a audio-recording session) the API provider
should use startOp(String, int, String)
and finishOp(String, int, String)
instead of noteOp(String, int, String)
.
Each platform defined runtime permission (beside background modifiers) has an associated app
op which is used for tracking but also to allow for silent failures. I.e. if the runtime
permission is denied the caller gets a SecurityException
, but if the permission is
granted and the app-op is MODE_IGNORED
then the callers gets dummy behavior, e.g.
location callbacks would not happen.
App-ops permissions are platform defined permissions that can be overridden. The security
check for app-op permissions should by default
check the permission grant
state. If the app-op state is set to MODE_ALLOWED
or MODE_IGNORED
the app-op
state should be checked instead of the permission grant state.
This functionality allows to grant access by default to apps fulfilling the requirements for a certain permission level. Still the behavior can be overridden when needed.
App-ops track many important events, including all accesses to runtime permission protected
APIs. This is done by tracking when an app-op was noted
or
started
. The tracked data can only be read by system components.
Only noteOp(String, int, String)
/startOp(String, int, String)
are tracked; unsafeCheckOp(String, int, String)
is not tracked.
Hence it is important to eventually call noteOp(String, int, String)
or startOp(String, int, String)
when providing
access to protected operations or data.
Some apps are forwarding access to other apps. E.g. an app might get the location from the
system's location provider and then send the location further to a 3rd app. In this case the
app passing on the data needs to call noteProxyOp(String, String)
to signal the access proxying. This
might also make sense inside of a single app if the access is forwarded between two parts of
the tagged with different attribution tags.
An app can register an OnOpNotedCallback
to get informed about what accesses the
system is tracking for it. As each runtime permission has an associated app-op this API is
particularly useful for an app that want to find unexpected private data accesses.
Nested classes | |
---|---|
interface |
AppOpsManager.OnOpActiveChangedListener
Callback for notification of changes to operation active state. |
interface |
AppOpsManager.OnOpChangedListener
Callback for notification of changes to operation state. |
class |
AppOpsManager.OnOpNotedCallback
Callback an app can |
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 settings. |
int |
WATCH_FOREGROUND_CHANGES
Flag for |
Public methods | |
---|---|
int
|
checkOp(String op, int uid, String packageName)
This method is deprecated.
Renamed to |
int
|
checkOpNoThrow(String op, int uid, String packageName)
This method is deprecated.
Renamed to |
void
|
checkPackage(int uid, String packageName)
This method is deprecated.
Use |
void
|
finishOp(String op, int uid, String packageName)
This method is deprecated.
Use |
void
|
finishOp(String op, int uid, String packageName, String attributionTag)
Report that an application is no longer performing an operation that had previously
been started with |
boolean
|
isOpActive(String op, int uid, String packageName)
Checks whether the given op for a package is active, i.e. |
int
|
noteOp(String op, int uid, String packageName)
This method is deprecated.
Use |
int
|
noteOp(String op, int uid, String packageName, String attributionTag, String message)
Make note of an application performing an operation. |
int
|
noteOpNoThrow(String op, int uid, String packageName, String attributionTag, String message)
Like |
int
|
noteOpNoThrow(String op, int uid, String packageName)
This method is deprecated.
Use |
int
|
noteProxyOp(String op, String proxiedPackageName, int proxiedUid, String proxiedAttributionTag, String message)
Make note of an application performing an operation on behalf of another application when handling an IPC. |
int
|
noteProxyOp(String op, String proxiedPackageName)
This method is deprecated.
Use |
int
|
noteProxyOpNoThrow(String op, String proxiedPackageName)
This method is deprecated.
Use |
int
|
noteProxyOpNoThrow(String op, String proxiedPackageName, int proxiedUid)
This method is deprecated.
Use |
int
|
noteProxyOpNoThrow(String op, String proxiedPackageName, int proxiedUid, String proxiedAttributionTag, String message)
Like |
static
String
|
permissionToOp(String permission)
Gets the app-op name associated with a given permission. |
void
|
setOnOpNotedCallback(Executor asyncExecutor, AppOpsManager.OnOpNotedCallback callback)
Set a new |
int
|
startOp(String op, int uid, String packageName)
This method is deprecated.
use |
int
|
startOp(String op, int uid, String packageName, String attributionTag, String message)
Report that an application has started executing a long-running operation. |
int
|
startOpNoThrow(String op, int uid, String packageName, String attributionTag, String message)
Like |
int
|
startOpNoThrow(String op, int uid, String packageName)
This method is deprecated.
use |
void
|
startWatchingActive(String[] ops, Executor executor, AppOpsManager.OnOpActiveChangedListener callback)
Start watching for changes to the active state of app-ops. |
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
|
stopWatchingActive(AppOpsManager.OnOpActiveChangedListener callback)
Stop watching for changes to the active state of an app-op. |
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 | |
---|---|
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)
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)
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)
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)
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)
public static final String OPSTR_ADD_VOICEMAIL
Required to access phone state related information.
Constant Value: "android:add_voicemail"
public static final String OPSTR_ANSWER_PHONE_CALLS
Answer incoming phone calls
Constant Value: "android:answer_phone_calls"
public static final String OPSTR_BODY_SENSORS
Access to body sensors such as heart rate, etc.
Constant Value: "android:body_sensors"
public static final String OPSTR_CALL_PHONE
Allows an application to initiate a phone call.
Constant Value: "android:call_phone"
public static final String OPSTR_CAMERA
Required to be able to access the camera device.
Constant Value: "android:camera"
public static final String OPSTR_COARSE_LOCATION
Access to coarse location information.
Constant Value: "android:coarse_location"
public static final String OPSTR_FINE_LOCATION
Access to fine location information.
Constant Value: "android:fine_location"
public static final String OPSTR_GET_USAGE_STATS
Access to UsageStatsManager
.
Constant Value: "android:get_usage_stats"
public static final String OPSTR_MOCK_LOCATION
Inject mock location into the system.
Constant Value: "android:mock_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"
public static final String OPSTR_MONITOR_LOCATION
Continually monitoring location data.
Constant Value: "android:monitor_location"
public static final String OPSTR_PICTURE_IN_PICTURE
Access to picture-in-picture.
Constant Value: "android:picture_in_picture"
public static final String OPSTR_PROCESS_OUTGOING_CALLS
Access APIs for diverting outgoing calls
Constant Value: "android:process_outgoing_calls"
public static final String OPSTR_READ_CALENDAR
Allows an application to read the user's calendar data.
Constant Value: "android:read_calendar"
public static final String OPSTR_READ_CALL_LOG
Allows an application to read the user's call log.
Constant Value: "android:read_call_log"
public static final String OPSTR_READ_CELL_BROADCASTS
Read previously received cell broadcast messages.
Constant Value: "android:read_cell_broadcasts"
public static final String OPSTR_READ_CONTACTS
Allows an application to read the user's contacts data.
Constant Value: "android:read_contacts"
public static final String OPSTR_READ_EXTERNAL_STORAGE
Read external storage.
Constant Value: "android:read_external_storage"
public static final String OPSTR_READ_PHONE_NUMBERS
Constant Value: "android:read_phone_numbers"
public static final String OPSTR_READ_PHONE_STATE
Required to access phone state related information.
Constant Value: "android:read_phone_state"
public static final String OPSTR_READ_SMS
Allows an application to read SMS messages.
Constant Value: "android:read_sms"
public static final String OPSTR_RECEIVE_MMS
Allows an application to receive MMS messages.
Constant Value: "android:receive_mms"
public static final String OPSTR_RECEIVE_SMS
Allows an application to receive SMS messages.
Constant Value: "android:receive_sms"
public static final String OPSTR_RECEIVE_WAP_PUSH
Allows an application to receive WAP push messages.
Constant Value: "android:receive_wap_push"
public static final String OPSTR_RECORD_AUDIO
Required to be able to access the microphone device.
Constant Value: "android:record_audio"
public static final String OPSTR_SEND_SMS
Allows an application to send SMS messages.
Constant Value: "android:send_sms"
public static final String OPSTR_SYSTEM_ALERT_WINDOW
Required to draw on top of other apps.
Constant Value: "android:system_alert_window"
public static final String OPSTR_USE_FINGERPRINT
Use the fingerprint API.
Constant Value: "android:use_fingerprint"
public static final String OPSTR_USE_SIP
Access APIs for SIP calling over VOIP or WiFi
Constant Value: "android:use_sip"
public static final String OPSTR_WRITE_CALENDAR
Allows an application to write to the user's calendar data.
Constant Value: "android:write_calendar"
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"
public static final String OPSTR_WRITE_CONTACTS
Allows an application to write to the user's contacts data.
Constant Value: "android:write_contacts"
public static final String OPSTR_WRITE_EXTERNAL_STORAGE
Write external storage.
Constant Value: "android:write_external_storage"
public static final String OPSTR_WRITE_SETTINGS
Required to write/modify/update system settings.
Constant Value: "android:write_settings"
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 int checkOp (String op, int uid, String packageName)
This method is deprecated.
Renamed to unsafeCheckOp(java.lang.String, int, java.lang.String)
.
Parameters | |
---|---|
op |
String : This value cannot be null . |
uid |
int |
packageName |
String : This value cannot be null . |
Returns | |
---|---|
int |
public int checkOpNoThrow (String op, int uid, String packageName)
This method is deprecated.
Renamed to unsafeCheckOpNoThrow(java.lang.String, int, java.lang.String)
.
Parameters | |
---|---|
op |
String : This value cannot be null . |
uid |
int |
packageName |
String : This value cannot be null . |
Returns | |
---|---|
int |
public void checkPackage (int uid, String packageName)
This method is deprecated.
Use PackageManager#getPackageUid
instead
Parameters | |
---|---|
uid |
int |
packageName |
String : This value cannot be null . |
public void finishOp (String op, int uid, String packageName)
This method is deprecated.
Use finishOp(java.lang.String, int, java.lang.String, java.lang.String)
instead
Parameters | |
---|---|
op |
String : This value cannot be null . |
uid |
int |
packageName |
String : This value cannot be null . |
public void finishOp (String op, int uid, String packageName, String attributionTag)
Report that an application is no longer performing an operation that had previously
been started with startOp(java.lang.String, int, java.lang.String, java.lang.String, 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 cannot be null . |
uid |
int |
packageName |
String : This value cannot be null . |
attributionTag |
String : This value may be null . |
public boolean isOpActive (String op, int uid, String packageName)
Checks whether the given op for a package is active, i.e. did someone call startOp(String, int, String)
without finishOp(String, int, String)
yet.
If you don't hold the android.Manifest.permission#WATCH_APPOPS
permission you can query only for your UID.
Parameters | |
---|---|
op |
String : This value cannot be null . |
uid |
int |
packageName |
String : This value cannot be null . |
Returns | |
---|---|
boolean |
public int noteOp (String op, int uid, String packageName)
This method is deprecated.
Use noteOp(java.lang.String, int, java.lang.String, java.lang.String, java.lang.String)
instead
Parameters | |
---|---|
op |
String : This value cannot be null . |
uid |
int |
packageName |
String : This value cannot be null . |
Returns | |
---|---|
int |
public int noteOp (String op, int uid, String packageName, String attributionTag, String message)
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.
If this is a check that is not preceding the protected operation, use
unsafeCheckOp(String, int, String)
instead.
Parameters | |
---|---|
op |
String : The operation to note. One of the OPSTR_* constants.
This value cannot 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 may be null . |
attributionTag |
String : The Context#createAttributionContext or null for default attribution
This value may be null . |
message |
String : A message describing the reason the op was noted
This value may 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. |
public int noteOpNoThrow (String op, int uid, String packageName, String attributionTag, String message)
Like noteOp(java.lang.String, int, java.lang.String, java.lang.String, java.lang.String)
but instead of throwing a
SecurityException
it returns MODE_ERRORED
.
Parameters | |
---|---|
op |
String : The operation to note. One of the OPSTR_* constants.
This value cannot 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 cannot be null . |
attributionTag |
String : The Context#createAttributionContext or null for default attribution
This value may be null . |
message |
String : A message describing the reason the op was noted
This value may 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). |
public int noteOpNoThrow (String op, int uid, String packageName)
This method is deprecated.
Use noteOpNoThrow(java.lang.String, int, java.lang.String, java.lang.String, java.lang.String)
instead
Parameters | |
---|---|
op |
String : This value cannot be null . |
uid |
int |
packageName |
String : This value cannot be null . |
Returns | |
---|---|
int |
public int noteProxyOp (String op, String proxiedPackageName, int proxiedUid, String proxiedAttributionTag, String message)
Make note of an application performing an operation on behalf of another application when
handling an IPC. 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 cannot be null . |
proxiedPackageName |
String : The name of the application calling into the proxy application.
This value may be null . |
proxiedUid |
int : The uid of the proxied application |
proxiedAttributionTag |
String : The proxied Context#createAttributionContext or null for default attribution
This value may be null . |
message |
String : A message describing the reason the op was noted
This value may 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 proxy or proxied app has been configured to crash on this op. |
public int noteProxyOp (String op, String proxiedPackageName)
This method is deprecated.
Use noteProxyOp(java.lang.String, java.lang.String, int, java.lang.String, java.lang.String)
instead
Parameters | |
---|---|
op |
String : This value cannot be null . |
proxiedPackageName |
String : This value cannot be null . |
Returns | |
---|---|
int |
public int noteProxyOpNoThrow (String op, String proxiedPackageName)
This method is deprecated.
Use noteProxyOpNoThrow(java.lang.String, java.lang.String, int, java.lang.String, java.lang.String)
instead
Parameters | |
---|---|
op |
String : This value cannot be null . |
proxiedPackageName |
String : This value cannot be null . |
Returns | |
---|---|
int |
public int noteProxyOpNoThrow (String op, String proxiedPackageName, int proxiedUid)
This method is deprecated.
Use noteProxyOpNoThrow(java.lang.String, java.lang.String, int, java.lang.String, java.lang.String)
instead
Parameters | |
---|---|
op |
String : This value cannot be null . |
proxiedPackageName |
String : This value may be null . |
proxiedUid |
int |
Returns | |
---|---|
int |
public int noteProxyOpNoThrow (String op, String proxiedPackageName, int proxiedUid, String proxiedAttributionTag, String message)
Like noteProxyOp(java.lang.String, java.lang.String, int, java.lang.String, java.lang.String)
but instead
of throwing a SecurityException
it returns MODE_ERRORED
.
This API requires package with the proxiedPackageName
to belong to
proxiedUid
.
Parameters | |
---|---|
op |
String : The op to note
This value cannot be null . |
proxiedPackageName |
String : The package to note the op for
This value may be null . |
proxiedUid |
int : The uid the package belongs to |
proxiedAttributionTag |
String : The proxied Context#createAttributionContext or null for default attribution
This value may be null . |
message |
String : A message describing the reason the op was noted
This value may be null . |
Returns | |
---|---|
int |
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.
This value cannot be null . |
Returns | |
---|---|
String |
The app-op associated with the permission or null . |
public void setOnOpNotedCallback (Executor asyncExecutor, AppOpsManager.OnOpNotedCallback callback)
Set a new OnOpNotedCallback
.
There can only ever be one collector per process. If there currently is another callback set, this will fail.
Parameters | |
---|---|
asyncExecutor |
Executor : executor to execute OnOpNotedCallback#onAsyncNoted on, null to unset
This value may be null .
Callback and listener events are dispatched through this
Executor , providing an easy way to control which thread is
used. To dispatch events through the main thread of your
application, you can use
Context.getMainExecutor() .
To dispatch events through a shared thread pool, you can use
AsyncTask#THREAD_POOL_EXECUTOR . |
callback |
AppOpsManager.OnOpNotedCallback : listener to set, null to unset
This value may be null . |
Throws | |
---|---|
IllegalStateException |
If another callback is already registered |
public int startOp (String op, int uid, String packageName)
This method is deprecated.
use startOp(java.lang.String, int, java.lang.String, java.lang.String, java.lang.String)
instead
Parameters | |
---|---|
op |
String : This value cannot be null . |
uid |
int |
packageName |
String : This value cannot be null . |
Returns | |
---|---|
int |
public int startOp (String op, int uid, String packageName, String attributionTag, String message)
Report that an application has started executing a long-running operation.
Parameters | |
---|---|
op |
String : The operation to start. One of the OPSTR_* constants.
This value cannot 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 may be null . |
attributionTag |
String : The Context#createAttributionContext or
null for default attribution
This value may be null . |
message |
String : Description why op was started
This value may 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 or the package is not in the passed in UID. |
public int startOpNoThrow (String op, int uid, String packageName, String attributionTag, String message)
Like startOp(java.lang.String, int, java.lang.String, java.lang.String, java.lang.String)
but instead of throwing a
SecurityException
it returns MODE_ERRORED
.
Parameters | |
---|---|
op |
String : The operation to start. One of the OP_* constants.
This value cannot 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 cannot be null . |
attributionTag |
String : The Context#createAttributionContext or
null for default attribution
This value cannot be null . |
message |
String : Description why op was started
This value may 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). |
public int startOpNoThrow (String op, int uid, String packageName)
This method is deprecated.
use startOpNoThrow(java.lang.String, int, java.lang.String, java.lang.String, java.lang.String)
instead
Parameters | |
---|---|
op |
String : This value cannot be null . |
uid |
int |
packageName |
String : This value cannot be null . |
Returns | |
---|---|
int |
public void startWatchingActive (String[] ops, Executor executor, AppOpsManager.OnOpActiveChangedListener callback)
Start watching for changes to the active state of app-ops. An app-op may be long running and it has a clear start and stop delimiters. If an op is being started or stopped by any package you will get a callback. To change the watched ops for a registered callback you need to unregister and register it again.
If you don't hold the android.Manifest.permission#WATCH_APPOPS
permission
you can watch changes only for your UID.
Parameters | |
---|---|
ops |
String : The operations to watch.
This value cannot be null . |
executor |
Executor : Callback and listener events are dispatched through this
Executor , providing an easy way to control which thread is
used. To dispatch events through the main thread of your
application, you can use
Context.getMainExecutor() .
To dispatch events through a shared thread pool, you can use
AsyncTask#THREAD_POOL_EXECUTOR .
This value cannot be null . |
callback |
AppOpsManager.OnOpActiveChangedListener : Where to report changes.
This value cannot be null . |
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 cannot 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 cannot be null . |
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 cannot 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 cannot be null . |
public void stopWatchingActive (AppOpsManager.OnOpActiveChangedListener callback)
Stop watching for changes to the active state of an app-op. An app-op may be long running and it has a clear start and stop delimiters. Unregistering a non-registered callback has no effect.
Parameters | |
---|---|
callback |
AppOpsManager.OnOpActiveChangedListener : This value cannot be null . |
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 cannot be null . |
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, java.lang.String, java.lang.String)
or startOp(java.lang.String, int, java.lang.String, java.lang.String, 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, java.lang.String, java.lang.String)
or
startOp(java.lang.String, int, java.lang.String, java.lang.String, java.lang.String)
to cover):
MODE_ALLOWED
.Parameters | |
---|---|
op |
String : The operation to check. One of the OPSTR_* constants.
This value cannot 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 cannot 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. |
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 cannot be null . |
uid |
int |
packageName |
String : This value cannot be null . |
Returns | |
---|---|
int |
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 cannot be null . |
uid |
int |
packageName |
String : This value cannot be null . |
Returns | |
---|---|
int |
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 cannot be null . |
uid |
int |
packageName |
String : This value cannot be null . |
Returns | |
---|---|
int |