AppOpsManager 类

定义

应用操作用于两个目的:访问控制和跟踪。

[Android.Runtime.Register("android/app/AppOpsManager", DoNotGenerateAcw=true)]
public class AppOpsManager : Java.Lang.Object
[<Android.Runtime.Register("android/app/AppOpsManager", DoNotGenerateAcw=true)>]
type AppOpsManager = class
    inherit Object
继承
AppOpsManager
属性

注解

应用操作用于两个目的:访问控制和跟踪。

应用操作涵盖各种功能,包括帮助运行时权限访问控制和跟踪电池消耗跟踪。

<h2>访问控制</h2>

应用操作可以控制每个 uid 或每个包。 使用哪一个取决于维护此应用操作的 API 提供程序。 对于任何安全或隐私相关的应用操作,提供商需要控制每个 uid 的应用操作,因为所有安全和隐私都基于 Android 中的 uid。

若要控制应用操作的访问,可将应用操作设置为:<dl><dt><#MODE_DEFAULTdd>默认行为,可能与 app-op 或 app-op <dt<>#MODE_ALLOWEDdd>允许访问 <dt#MODE_IGNORED><dd>不允许访问,即不要执行请求的操作或返回 no 或占位符数据 <dt#MODE_ERRORED<>dd>引发SecurityException访问。 可以使用方法来检查模式 </dl 来取消...noThrow此操作>

API 提供程序需要检查返回 #noteOp 的模式(如果允许访问受应用操作限制的操作)。 #unsafeCheckOp 如果未授予任何访问权限,则应用于检查模式。 例如,这可用于在 UI 中显示应用操作状态或在以后调用 #noteOp 之前检查状态时。

如果操作引用时间跨度(例如录音会话),API 提供程序应使用 #startOp#finishOp 而不是 #noteOp

<h3>运行时权限和 app-ops</h3>

每个平台定义的运行时权限(除了后台修饰符)都有一个关联的应用操作,用于跟踪,但也允许无提示故障。 例如,如果运行时权限被拒绝,则调用方会获取一个 SecurityException,但如果授予权限并且应用操作是 #MODE_IGNORED 调用方获取占位符行为,例如位置回调不会发生。

<h3>应用操作权限</h3>

应用操作权限是可重写的平台定义权限。 应用操作权限的安全检查应通过 #MODE_DEFAULT default 检查权限授予状态。 如果应用操作状态设置为 #MODE_ALLOWED#MODE_IGNORED 应检查应用操作状态,而不是权限授予状态。

此功能允许默认向满足特定权限级别的要求的应用授予访问权限。 仍可根据需要重写该行为。

<h2>跟踪</h2>

应用操作跟踪许多重要事件,包括对运行时权限保护 API 的所有访问。 这是通过跟踪应用操作#noteOp noted#startOp started或 。 跟踪的数据只能由系统组件读取。

<b>仅 #noteOp/#startOp 跟踪; #unsafeCheckOp 未跟踪。 因此,最终调用 #noteOp#startOp 提供对受保护操作或数据的访问权限非常重要。</b>

某些应用正在转发对其他应用的访问。 例如,应用可能会从系统的位置提供程序获取位置,然后将该位置进一步发送到第三个应用。 在这种情况下,传递数据的应用需要调用 #noteProxyOp 以发出访问代理信号。 如果在具有不同属性标记的标记的两个部分之间转发访问,则单个应用内部也可能有意义。

应用可以注册一个 OnOpNotedCallback 来了解系统正在跟踪哪些访问权限。 由于每个运行时权限都有关联的应用操作,因此此 API 对于想要查找意外的专用数据访问的应用特别有用。

Java文档android.app.AppOpsManager

本页的某些部分是根据 创建和共享的工作进行的修改,并根据 许可证中所述的条款使用。

构造函数

名称 说明
AppOpsManager(IntPtr, JniHandleOwnership)

创建 JNI 对象的托管表示形式时使用的构造函数;由运行时调用。

字段

名称 说明
ModeAllowed
已过时.

结果#checkOp,,#noteOp#startOp:允许给定调用方执行给定操作。

ModeDefault
已过时.

#checkOp结果,:#noteOp#startOp给定调用方应使用其默认安全检查。

ModeErrored
已过时.

#checkOpNoThrow结果,,#noteOpNoThrow#startOpNoThrow:不允许给定调用方执行给定操作,并且此尝试应导致其出现致命错误,通常是一个SecurityException

ModeForeground
已过时.

特殊模式,表示“仅当应用处于前台时才允许”。

ModeIgnored
已过时.

#checkOp结果,,#noteOp#startOp:不允许给定调用方执行给定操作,并且此尝试应<以>无提示方式失败</em>(不应导致应用崩溃)。

OpNotedCallbackFlagIgnoreAsync
已过时.

忽略异步操作记下的事件。

OpstrAddVoicemail

访问电话状态相关信息所必需的。

OpstrAnswerPhoneCalls

接听来电

OpstrBodySensors

访问人体传感器,例如心率等。

OpstrCallPhone

允许应用程序发起电话呼叫。

OpstrCamera

需要能够访问相机设备。

OpstrCoarseLocation

访问粗略的位置信息。

OpstrFineLocation

访问精细的位置信息。

OpstrGetUsageStats

访问 android.app.usage.UsageStatsManager

OpstrMockLocation

将模拟位置注入系统。

OpstrMonitorHighPowerLocation

使用相对较高的电源请求持续监视位置数据。

OpstrMonitorLocation

持续监视位置数据。

OpstrPictureInPicture

访问图片中的图片。

OpstrProcessOutgoingCalls

用于转移传出调用的访问 API

OpstrReadCalendar

允许应用程序读取用户的日历数据。

OpstrReadCallLog

允许应用程序读取用户的呼叫日志。

OpstrReadCellBroadcasts

读取以前收到的单元格广播消息。

OpstrReadContacts

允许应用程序读取用户的联系人数据。

OpstrReadExternalStorage

读取外部存储。

OpstrReadPhoneNumbers

应用操作用于两个目的:访问控制和跟踪。

OpstrReadPhoneState

访问电话状态相关信息所必需的。

OpstrReadSms

允许应用程序读取短信。

OpstrReceiveMms

允许应用程序接收彩信。

OpstrReceiveSms

允许应用程序接收短信。

OpstrReceiveWapPush

允许应用程序接收 WAP 推送消息。

OpstrRecordAudio

需要能够访问麦克风设备。

OpstrSendSms

允许应用程序发送短信。

OpstrSystemAlertWindow

需要在其他应用的基础上绘制。

OpstrUseFingerprint

使用指纹 API。

OpstrUseSip

通过 VOIP 或 WiFi 进行 SIP 呼叫的访问 API

OpstrWriteCalendar

允许应用程序写入用户的日历数据。

OpstrWriteCallLog

允许应用程序写入用户的呼叫日志。

OpstrWriteContacts

允许应用程序写入用户的联系人数据。

OpstrWriteExternalStorage

写入外部存储。

OpstrWriteSettings

写入/修改/更新系统设置所必需的。

WatchForegroundChanges
已过时.

#startWatchingMode(String, String, int, OnOpChangedListener)标志:如果操作的 uid 的前景状态发生更改,则还会获取报告。

属性

名称 说明
Class

返回此 Object的运行时类。

(继承自 Object)
Handle

基础 Android 实例的句柄。

(继承自 Object)
JniIdentityHashCode

应用操作用于两个目的:访问控制和跟踪。

(继承自 Object)
JniPeerMembers

应用操作用于两个目的:访问控制和跟踪。

PeerReference

应用操作用于两个目的:访问控制和跟踪。

(继承自 Object)
ThresholdClass

此 API 支持 Mono for Android 基础结构,不打算直接从代码使用。

ThresholdType

此 API 支持 Mono for Android 基础结构,不打算直接从代码使用。

方法

名称 说明
CheckOp(String, Int32, String, String)

检查应用程序是否可以执行操作。

CheckOp(String, Int32, String)

检查应用程序是否可以执行操作。

CheckOpNoThrow(String, Int32, String, String)

就像 #checkOp(String, int, String, String) ,而不是抛出 SecurityException 它返回 #MODE_ERRORED

CheckOpNoThrow(String, Int32, String)

就像 #checkOp(String, int, String) ,而不是抛出 SecurityException 它返回 #MODE_ERRORED

CheckOpRawNoThrow(String, Int32, String, String)

类似于 #checkOp(String, int, String, String) ,但返回 <与操作关联的 em>raw</em> 模式。

CheckPackage(Int32, String)

此成员已弃用。

Clone()

创建并返回此对象的副本。

(继承自 Object)
Dispose()

应用操作用于两个目的:访问控制和跟踪。

(继承自 Object)
Dispose(Boolean)

应用操作用于两个目的:访问控制和跟踪。

(继承自 Object)
Equals(Object)

指示其他对象是否“等于”此对象。

(继承自 Object)
FinishOp(String, Int32, String, String)

报告应用程序不再执行以前已启动 #startOp(String, int, String, String, String)的操作。

FinishOp(String, Int32, String)

此成员已弃用。

FinishProxyOp(String, Int32, String, String)

报告应用程序不再执行以前已启动 #startProxyOp(String, int, String, String, String)的操作。

GetHashCode()

返回对象的哈希代码值。

(继承自 Object)
IsOpActive(String, Int32, String)

检查包的给定操作是否处于活动状态(i)。

JavaFinalize()

当垃圾回收确定不再引用该对象时,由对象上的垃圾回收器调用。

(继承自 Object)
NoteOp(String, Int32, String, String, String)

记下执行操作的应用程序,并检查应用程序是否允许执行该操作。

NoteOp(String, Int32, String)

此成员已弃用。

NoteOpNoThrow(String, Int32, String, String, String)

就像 #noteOp(String, int, String, String, String) ,而不是抛出 SecurityException 它返回 #MODE_ERRORED

NoteOpNoThrow(String, Int32, String)

此成员已弃用。

NoteProxyOp(String, String, Int32, String, String)

记下处理 IPC 时代表另一个应用程序执行操作的应用程序。

NoteProxyOp(String, String)

此成员已弃用。

NoteProxyOpNoThrow(String, String, Int32, String, String)

就像 #noteProxyOp(String, String, int, String, String) ,而不是抛出 SecurityException 它返回 #MODE_ERRORED

NoteProxyOpNoThrow(String, String, Int32)

此成员已弃用。

NoteProxyOpNoThrow(String, String)

此成员已弃用。

Notify()

唤醒正在等待此对象的监视器的单个线程。

(继承自 Object)
NotifyAll()

唤醒正在等待此对象的监视器的所有线程。

(继承自 Object)
PermissionToOp(String)

获取与给定权限关联的应用操作名称。

SetHandle(IntPtr, JniHandleOwnership)

设置 Handle 属性。

(继承自 Object)
SetOnOpNotedCallback(IExecutor, AppOpsManager+OnOpNotedCallback, AppOpsManagerCallbackFlag)

应用操作用于两个目的:访问控制和跟踪。

SetOnOpNotedCallback(IExecutor, AppOpsManager+OnOpNotedCallback)

设置一个新 OnOpNotedCallback

StartOp(String, Int32, String, String, String)

报告应用程序已开始执行长时间运行的操作。

StartOp(String, Int32, String)

此成员已弃用。

StartOpNoThrow(String, Int32, String, String, String)

就像 #startOp(String, int, String, String, String) ,而不是抛出 SecurityException 它返回 #MODE_ERRORED

StartOpNoThrow(String, Int32, String)

此成员已弃用。

StartProxyOp(String, Int32, String, String, String)

报告应用程序在处理 IPC 时已开始代表另一个应用程序执行长时间运行的操作。

StartProxyOpNoThrow(String, Int32, String, String, String)

就像 #startProxyOp(String, int, String, String, String) ,而不是抛出 SecurityException 它返回 #MODE_ERRORED

StartWatchingActive(String[], IExecutor, AppOpsManager+IOnOpActiveChangedListener)

应用操作用于两个目的:访问控制和跟踪。

StartWatchingMode(String, String, AppOpsManager+IOnOpChangedListener)

监视对给定应用包中给定操作的操作模式的更改。

StartWatchingMode(String, String, WatchForeground, AppOpsManager+IOnOpChangedListener)

应用操作用于两个目的:访问控制和跟踪。

StopWatchingActive(AppOpsManager+IOnOpActiveChangedListener)

停止监视对应用操作的活动状态的更改。

StopWatchingMode(AppOpsManager+IOnOpChangedListener)

停止以前开始使用的 #startWatchingMode监视。

ToArray<T>()

应用操作用于两个目的:访问控制和跟踪。

(继承自 Object)
ToString()

返回对象的字符串表示形式。

(继承自 Object)
UnregisterFromRuntime()

应用操作用于两个目的:访问控制和跟踪。

(继承自 Object)
UnsafeCheckOp(String, Int32, String)

检查应用程序是否可以执行操作。

UnsafeCheckOpNoThrow(String, Int32, String)

就像 #unsafeCheckOp(String, int, String) ,而不是抛出 SecurityException 它返回 #MODE_ERRORED

UnsafeCheckOpRaw(String, Int32, String)

类似于 #checkOp ,但返回 <与操作关联的 em>raw</em> 模式。

UnsafeCheckOpRawNoThrow(String, Int32, String)

类似于 #checkOp ,但返回 <与操作关联的 em>raw</em> 模式。

Wait()

使当前线程等待,直到唤醒它,通常是通过 em 通知/em> 或 <em>interrupted</em>。<><

(继承自 Object)
Wait(Int64, Int32)

使当前线程等待直到唤醒,通常是通过 <em>通知</em> 或 <em interrupted</em>>,或直到经过一定数量的实时。

(继承自 Object)
Wait(Int64)

使当前线程等待直到唤醒,通常是通过 <em>通知</em> 或 <em interrupted</em>>,或直到经过一定数量的实时。

(继承自 Object)

显式接口实现

名称 说明
IJavaPeerable.Disposed()

应用操作用于两个目的:访问控制和跟踪。

(继承自 Object)
IJavaPeerable.DisposeUnlessReferenced()

应用操作用于两个目的:访问控制和跟踪。

(继承自 Object)
IJavaPeerable.Finalized()

应用操作用于两个目的:访问控制和跟踪。

(继承自 Object)
IJavaPeerable.JniManagedPeerState

应用操作用于两个目的:访问控制和跟踪。

(继承自 Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

应用操作用于两个目的:访问控制和跟踪。

(继承自 Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

应用操作用于两个目的:访问控制和跟踪。

(继承自 Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

应用操作用于两个目的:访问控制和跟踪。

(继承自 Object)

扩展方法

名称 说明
GetJniTypeName(IJavaPeerable)

获取实例 self类型的 JNI 名称。

JavaAs<TResult>(IJavaPeerable)

尝试强制self键入TResult,检查强制是否在Java端有效。

JavaCast<TResult>(IJavaObject)

执行 Android 运行时检查的类型转换。

JavaCast<TResult>(IJavaObject)

应用操作用于两个目的:访问控制和跟踪。

TryJavaCast<TResult>(IJavaPeerable, TResult)

尝试强制self键入TResult,检查强制是否在Java端有效。

适用于