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>不允许访问,即不要执行请求的操作或返回否或占位符数据 <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 对于想要查找意外的专用数据访问的应用特别有用。

适用于 . 的 android.app.AppOpsManagerJava 文档

本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。

构造函数

AppOpsManager(IntPtr, JniHandleOwnership)

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

字段

ModeAllowed
已过时.

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

ModeDefault
已过时.

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

ModeErrored
已过时.

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

ModeForeground
已过时.

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

ModeIgnored
已过时.

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

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)

此成员已弃用。

CheckOpNoThrow(String, Int32, String)

此成员已弃用。

CheckPackage(Int32, String)

此成员已弃用。

Clone()

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

(继承自 Object)
Dispose()

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

(继承自 Object)
Dispose(Boolean)

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

(继承自 Object)
Equals(Object)

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

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

此成员已弃用。

FinishOp(String, Int32, String, String)

报告应用程序不再执行以前已启动 #startOp(String, int, String, String, 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)

此成员已弃用。

NoteOp(String, Int32, String, String, String)

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

NoteOpNoThrow(String, Int32, String)

此成员已弃用。

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

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

NoteProxyOp(String, String)

此成员已弃用。

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

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

NoteProxyOpNoThrow(String, String)

此成员已弃用。

NoteProxyOpNoThrow(String, String, Int32)

此成员已弃用。

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

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

Notify()

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

(继承自 Object)
NotifyAll()

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

(继承自 Object)
PermissionToOp(String)

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

SetHandle(IntPtr, JniHandleOwnership)

设置 Handle 属性。

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

设置一个新 OnOpNotedCallback

StartOp(String, Int32, String)

此成员已弃用。

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

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

StartOpNoThrow(String, Int32, String)

此成员已弃用。

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

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

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)

就像 #checkOp ,而不是抛出 SecurityException 它返回 #MODE_ERRORED

UnsafeCheckOpRaw(String, Int32, String)

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

UnsafeCheckOpRawNoThrow(String, Int32, String)

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

Wait()

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

(继承自 Object)
Wait(Int64)

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

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

使当前线程等待直到唤醒,通常是通过 <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)

扩展方法

JavaCast<TResult>(IJavaObject)

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

JavaCast<TResult>(IJavaObject)

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

GetJniTypeName(IJavaPeerable)

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

适用于