public class RestrictionsManager
extends Object
java.lang.Object | |
↳ | android.content.RestrictionsManager |
为应用程序提供查询管理用户的实体施加的限制的机制。 应用程序还可以向本地或远程设备管理员发送权限请求,以覆盖应用程序特定的默认限制或需要管理员明确授权的任何其他操作。
应用程序可以通过清单中指定的XML文件公开一组限制。
如果用户拥有活动的限制提供程序,则除静态限制之外,还可以进行动态请求。 动态请求是特定于应用程序的,可以通过预定义的一组请求类型来表示。
RestrictionsManager将动态请求转发给活动的限制提供程序。 当从设备或用户的管理员收到响应时,限制提供程序可以通过调用notifyPermissionResponse(String, PersistableBundle)
来响应请求。 响应通过受保护的广播ACTION_PERMISSION_RESPONSE_RECEIVED
传回给应用程序。
静态限制由清单中的元数据属性引用的XML文件指定。 这使应用程序以及任何Web管理控制台都能够从apk中读取可用限制的列表。
XML格式的语法如下所示:
<?xml version="1.0" encoding="utf-8"?> <restrictions xmlns:android="http://schemas.android.com/apk/res/android" > <restriction android:key="string" android:title="string resource" android:restrictionType=["bool" | "string" | "integer" | "choice" | "multi-select" | "hidden" | "bundle" | "bundle_array"] android:description="string resource" android:entries="string-array resource" android:entryValues="string-array resource" android:defaultValue="reference" > <restriction ... /> ... </restriction> <restriction ... /> ... </restrictions>
每个限制的属性取决于限制类型。
key
, title
and restrictionType
are mandatory.entries
and entryValues
are required if restrictionType
is choice
or multi-select
.defaultValue
is optional and its type depends on the restrictionType
hidden
type must have a defaultValue
and will not be shown to the administrator. It can be used to pass along data that cannot be modified, such as a version code.description
is meant to describe the restriction in more detail to the administrator controlling the values, if the title is not sufficient.只有类型 bundle
和 bundle_array
限制可以有一个或多个嵌套限制元素。
在清单的 application
部分中,添加元数据标记以指向限制XML文件,如下所示:
<application ... > <meta-data android:name="android.content.APP_RESTRICTIONS" android:resource="@xml/app_restrictions" /> ... </application>
也可以看看:
Public methods |
|
---|---|
static Bundle |
convertRestrictionsToBundle(List<RestrictionEntry> entries) 使用以下映射将限制列表转换为相应的捆绑包: |
Intent |
createLocalApprovalIntent() |
Bundle |
getApplicationRestrictions() 返回适用于此应用程序的任何可用的应用程序特定限制集。 |
List<RestrictionEntry> |
getManifestRestrictions(String packageName) 解析并返回指定软件包清单中定义的限制列表(如果有)。 |
boolean |
hasRestrictionsProvider() 由应用程序调用以检查是否存在活动的限制提供程序。 |
void |
notifyPermissionResponse(String packageName, PersistableBundle response) 由限制提供者调用以提交对应用程序的响应。 |
void |
requestPermission(String requestType, String requestId, PersistableBundle request) 由应用程序调用以请求操作权限。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
String ACTION_PERMISSION_RESPONSE_RECEIVED
在接收到许可请求的响应时传送的广播意图。 如果应用程序当前不在前台,应该不会通过前台来中断用户。 它可以发布通知通知用户响应,也可以等到用户下次启动应用程序时为止。
例如,如果用户请求许可进行应用内购买,则该应用可以发布通知,该请求已被批准或被拒绝。
广播意图包含以下附加内容: EXTRA_RESPONSE_BUNDLE
。
常量值:“android.content.action.PERMISSION_RESPONSE_RECEIVED”
String ACTION_REQUEST_LOCAL_APPROVAL
活动意图,由限制提供程序包可选实施,以在设备上本地挑战管理员的PIN或密码。 应用程序将使用startActivityForResult(Intent, int)
来调用此意图。 在一个成功的响应, onActivityResult(int, int, Intent)
将返回的resultCode为RESULT_OK
。
该意图必须包含 EXTRA_REQUEST_BUNDLE
作为额外信息,并且该信息包必须包含至少 REQUEST_KEY_MESSAGE
以供活动显示。
也可以看看:
常量值:“android.content.action.REQUEST_LOCAL_APPROVAL”
String ACTION_REQUEST_PERMISSION
广播意图发送到限制提供程序来处理来自应用程序的权限请求。 它具有以下附加功能: EXTRA_PACKAGE_NAME
, EXTRA_REQUEST_TYPE
, EXTRA_REQUEST_ID
和EXTRA_REQUEST_BUNDLE
。 限制提供商将处理请求并在响应可用时通过调用notifyPermissionResponse(String, PersistableBundle)
回应notifyPermissionResponse(String, PersistableBundle)
。
BroadcastReceiver必须要求 BIND_DEVICE_ADMIN
权限才能确保只有系统才能发送广播。
常量值:“android.content.action.REQUEST_PERMISSION”
String EXTRA_PACKAGE_NAME
发出请求的应用程序的包名称。
类型:字符串
常量值:“android.content.extra.PACKAGE_NAME”
String EXTRA_REQUEST_BUNDLE
请求包在 ACTION_REQUEST_PERMISSION
广播中传递。
常量值:“android.content.extra.REQUEST_BUNDLE”
String EXTRA_REQUEST_ID
请求ID在 ACTION_REQUEST_PERMISSION
广播中传递。
类型:字符串
常量值:“android.content.extra.REQUEST_ID”
String EXTRA_REQUEST_TYPE
请求类型在 ACTION_REQUEST_PERMISSION
广播中传递。
类型:字符串
常量值:“android.content.extra.REQUEST_TYPE”
String EXTRA_RESPONSE_BUNDLE
包含管理员对特定请求的响应。 该软件包至少包含以下信息:
REQUEST_KEY_ID
: The request ID.RESPONSE_KEY_RESULT
: The response result.常量值:“android.content.extra.RESPONSE_BUNDLE”
String META_DATA_APP_RESTRICTIONS
清单中指向包含应用程序可用限制的XML文件的元数据条目的名称。
常量值:“android.content.APP_RESTRICTIONS”
String REQUEST_KEY_APPROVE_LABEL
请求包中包含的请求批准按钮标签的键。
可选,可以显示为对话框中的正面按钮上的标签或呈现给批准请求的管理员的通知。
类型:字符串
常量值:“android.request.approve_label”
String REQUEST_KEY_DATA
请求数据包中包含的请求数据的密钥。
可选,通常用于标识要引用的特定数据,例如电影或书籍的唯一标识符。 这不是用于显示目的,更像是一个cookie。 该值返回到EXTRA_RESPONSE_BUNDLE
。
类型:字符串
常量值:“android.request.data”
String REQUEST_KEY_DENY_LABEL
包含在请求包中的请求拒绝按钮标签的键。
可选,可以显示为对话框中的否定按钮上的标签或呈现给批准请求的管理员的通知。
类型:字符串
常量值:“android.request.deny_label”
String REQUEST_KEY_ICON
包含在请求包中的请求图标的键。
可选,显示在批准请求的管理员的请求消息旁边。 内容必须是压缩图像,如PNG或JPEG,作为字节数组。
类型:byte []
常量值:“android.request.icon”
String REQUEST_KEY_ID
包含在请求包中的请求ID的密钥。
应用生成的请求ID在接收到响应时识别特定的请求。 该值返回到EXTRA_RESPONSE_BUNDLE
。
类型:字符串
常量值:“android.request.id”
String REQUEST_KEY_MESSAGE
请求包中包含的请求消息的密钥。
必需的,显示为提交给批准请求的管理员的通知或对话框中的实际消息。
类型:字符串
常量值:“android.request.mesg”
String REQUEST_KEY_NEW_REQUEST
发布请求包中包含的新请求的密钥。 如果此设置为true,则限制提供程序必须发出新的请求。 如果它为false或未指定,那么限制提供程序可以返回具有相同requestId的缓存响应(如果可用)。 如果没有缓存响应,它将向管理员发出一个新响应。
类型:布尔值
常量值:“android.request.new_request”
String REQUEST_KEY_TITLE
包含在请求包中的请求标题密钥。
可选,通常用作提交给批准请求的管理员的任何通知或对话的标题。
类型:字符串
常量值:“android.request.title”
String REQUEST_TYPE_APPROVAL
针对简单问题的请求类型,带有可能的标题和图标。
必需的密钥是: REQUEST_KEY_MESSAGE
可选键是 REQUEST_KEY_DATA
, REQUEST_KEY_ICON
, REQUEST_KEY_TITLE
, REQUEST_KEY_APPROVE_LABEL
和 REQUEST_KEY_DENY_LABEL
。
常量值:“android.request.type.approval”
String RESPONSE_KEY_ERROR_CODE
发送到应用程序的响应包中的可选错误代码的关键字。
类型:int
可能的值: RESULT_ERROR_BAD_REQUEST
, RESULT_ERROR_NETWORK
或者 RESULT_ERROR_INTERNAL
。
常量值:“android.response.errorcode”
String RESPONSE_KEY_MESSAGE
发送到应用程序的响应包中的可选消息的关键字。
类型:字符串
常量值:“android.response.msg”
String RESPONSE_KEY_RESPONSE_TIMESTAMP
管理员响应权限请求时的可选时间戳的键。 自1970年1月1日00:00:00开始,以毫秒为单位。
类型:长
常量值:“android.response.timestamp”
String RESPONSE_KEY_RESULT
发送给应用程序的响应包中的响应结果的关键字,用于许可请求。 它表示请求的状态。 在某些情况下,附加消息可能在RESPONSE_KEY_MESSAGE
可用,以显示给用户。
类型:int
可能的值: RESULT_APPROVED
, RESULT_DENIED
, RESULT_NO_RESPONSE
, RESULT_UNKNOWN_REQUEST
或者 RESULT_ERROR
。
常量值:“android.response.result”
int RESULT_ERROR
表示错误状态的响应结果值。 对于密钥RESPONSE_KEY_ERROR_CODE
,响应包中可能有其他错误代码。 对于密钥RESPONSE_KEY_MESSAGE
,响应包中可能还有相关的错误消息。
常量值:5(0x00000005)
int RESULT_ERROR_BAD_REQUEST
错误代码表明请求存在问题。
存储在响应包中的 RESPONSE_KEY_ERROR_CODE
字段中。
常数值:1(0x00000001)
int RESULT_ERROR_INTERNAL
错误代码表明存在内部错误。
存储在响应包中的 RESPONSE_KEY_ERROR_CODE
字段中。
常量值:3(0x00000003)
int RESULT_ERROR_NETWORK
指示网络出现问题的错误代码。
存储在响应包中的 RESPONSE_KEY_ERROR_CODE
字段中。
常量值:2(0x00000002)
int RESULT_UNKNOWN_REQUEST
当不是新请求时,表示请求未知的响应结果值。
常量值:4(0x00000004)
Bundle convertRestrictionsToBundle (List<RestrictionEntry> entries)
使用以下映射将限制列表转换为相应的捆绑包:
Parameters | |
---|---|
entries |
List : list of restrictions |
Returns | |
---|---|
Bundle |
Bundle getApplicationRestrictions ()
返回适用于此应用程序的任何可用的应用程序特定限制集。
Returns | |
---|---|
Bundle |
the application restrictions as a Bundle. Returns null if there are no restrictions. |
List<RestrictionEntry> getManifestRestrictions (String packageName)
解析并返回指定软件包清单中定义的限制列表(如果有)。
Parameters | |
---|---|
packageName |
String : The application for which to fetch the restrictions list. |
Returns | |
---|---|
List<RestrictionEntry> |
The list of RestrictionEntry objects created from the XML file specified in the manifest, or null if none was specified. |
boolean hasRestrictionsProvider ()
由应用程序调用以检查是否存在活动的限制提供程序。 如果没有,则requestPermission(String, String, PersistableBundle)
不可用。
Returns | |
---|---|
boolean |
whether there is an active Restrictions Provider. |
void notifyPermissionResponse (String packageName, PersistableBundle response)
由限制提供者调用以提交对应用程序的响应。
Parameters | |
---|---|
packageName |
String : the application to deliver the response to. Cannot be null. |
response |
PersistableBundle : the bundle containing the response status, request ID and other information. Cannot be null. |
Throws | |
---|---|
IllegalArgumentException |
if any of the required parameters are missing. |
void requestPermission (String requestType, String requestId, PersistableBundle request)
由应用程序调用以请求操作权限。 根据所选的请求类型,请求的内容被传递到包含多个数据的Bundle中。
Parameters | |
---|---|
requestType |
String : The type of request. The type could be one of the predefined types specified here or a custom type that the specific Restrictions Provider might understand. For custom types, the type name should be namespaced to avoid collisions with predefined types and types specified by other Restrictions Providers. |
requestId |
String : A unique id generated by the app that contains sufficient information to identify the parameters of the request when it receives the id in the response. |
request |
PersistableBundle : A PersistableBundle containing the data corresponding to the specified request type. The keys for the data in the bundle depend on the request type. |
Throws | |
---|---|
IllegalArgumentException |
if any of the required parameters are missing. |