Most visited

Recently visited

Added in API level 21

RestrictionsManager

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>
 

每个限制的属性取决于限制类型。

只有类型 bundlebundle_array限制可以有一个或多个嵌套限制元素。

在清单的 application部分中,添加元数据标记以指向限制XML文件,如下所示:

 <application ... >
     <meta-data android:name="android.content.APP_RESTRICTIONS"
                   android:resource="@xml/app_restrictions" />
     ...
 </application>
 

也可以看看:

Summary

Constants

String ACTION_PERMISSION_RESPONSE_RECEIVED

在接收到许可请求的响应时传送的广播意图。

String ACTION_REQUEST_LOCAL_APPROVAL

活动意图,由限制提供程序包可选实施,以在设备上本地挑战管理员的PIN或密码。

String ACTION_REQUEST_PERMISSION

广播意图发送到限制提供程序来处理来自应用程序的权限请求。

String EXTRA_PACKAGE_NAME

发出请求的应用程序的包名称。

String EXTRA_REQUEST_BUNDLE

请求包在 ACTION_REQUEST_PERMISSION广播中传递。

String EXTRA_REQUEST_ID

请求ID在 ACTION_REQUEST_PERMISSION广播中传递。

String EXTRA_REQUEST_TYPE

请求类型在 ACTION_REQUEST_PERMISSION广播中传递。

String EXTRA_RESPONSE_BUNDLE

包含管理员对特定请求的响应。

String META_DATA_APP_RESTRICTIONS

清单中指向包含应用程序可用限制的XML文件的元数据条目的名称。

String REQUEST_KEY_APPROVE_LABEL

请求包中包含的请求批准按钮标签的键。

String REQUEST_KEY_DATA

请求数据包中包含的请求数据的密钥。

String REQUEST_KEY_DENY_LABEL

包含在请求包中的请求拒绝按钮标签的键。

String REQUEST_KEY_ICON

包含在请求包中的请求图标的键。

String REQUEST_KEY_ID

包含在请求包中的请求ID的密钥。

String REQUEST_KEY_MESSAGE

请求包中包含的请求消息的密钥。

String REQUEST_KEY_NEW_REQUEST

发布请求包中包含的新请求的密钥。

String REQUEST_KEY_TITLE

包含在请求包中的请求标题密钥。

String REQUEST_TYPE_APPROVAL

针对简单问题的请求类型,带有可能的标题和图标。

String RESPONSE_KEY_ERROR_CODE

发送到应用程序的响应包中的可选错误代码的关键字。

String RESPONSE_KEY_MESSAGE

发送到应用程序的响应包中的可选消息的关键字。

String RESPONSE_KEY_RESPONSE_TIMESTAMP

管理员响应权限请求时的可选时间戳的键。

String RESPONSE_KEY_RESULT

发送给应用程序的响应包中的响应结果的关键字,用于许可请求。

int RESULT_APPROVED

指示请求已被批准的响应结果值。

int RESULT_DENIED

指示请求被拒绝的响应结果值。

int RESULT_ERROR

表示错误状态的响应结果值。

int RESULT_ERROR_BAD_REQUEST

错误代码表明请求存在问题。

int RESULT_ERROR_INTERNAL

错误代码表明存在内部错误。

int RESULT_ERROR_NETWORK

指示网络出现问题的错误代码。

int RESULT_NO_RESPONSE

表示请求尚未收到响应的响应结果值。

int RESULT_UNKNOWN_REQUEST

当不是新请求时,表示请求未知的响应结果值。

Public methods

static Bundle convertRestrictionsToBundle(List<RestrictionEntry> entries)

使用以下映射将限制列表转换为相应的捆绑包:

RestrictionEntry Bundle
TYPE_BOOLEAN putBoolean(String, boolean)
TYPE_CHOICE, TYPE_MULTI_SELECT putStringArray(String, String[])
TYPE_INTEGER putInt(String, int)
TYPE_STRING putString(String, String)
TYPE_BUNDLE putBundle(String, Bundle)
TYPE_BUNDLE_ARRAY putParcelableArray(String, Parcelable[])

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

Constants

ACTION_PERMISSION_RESPONSE_RECEIVED

Added in API level 21
String ACTION_PERMISSION_RESPONSE_RECEIVED

在接收到许可请求的响应时传送的广播意图。 如果应用程序当前不在前台,应该不会通过前台来中断用户。 它可以发布通知通知用户响应,也可以等到用户下次启动应用程序时为止。

例如,如果用户请求许可进行应用内购买,则该应用可以发布通知,该请求已被批准或被拒绝。

广播意图包含以下附加内容: EXTRA_RESPONSE_BUNDLE

常量值:“android.content.action.PERMISSION_RESPONSE_RECEIVED”

ACTION_REQUEST_LOCAL_APPROVAL

Added in API level 21
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”

ACTION_REQUEST_PERMISSION

Added in API level 21
String ACTION_REQUEST_PERMISSION

广播意图发送到限制提供程序来处理来自应用程序的权限请求。 它具有以下附加功能: EXTRA_PACKAGE_NAMEEXTRA_REQUEST_TYPEEXTRA_REQUEST_IDEXTRA_REQUEST_BUNDLE 限制提供商将处理请求并在响应可用时通过调用notifyPermissionResponse(String, PersistableBundle)回应notifyPermissionResponse(String, PersistableBundle)

BroadcastReceiver必须要求 BIND_DEVICE_ADMIN权限才能确保只有系统才能发送广播。

常量值:“android.content.action.REQUEST_PERMISSION”

EXTRA_PACKAGE_NAME

Added in API level 21
String EXTRA_PACKAGE_NAME

发出请求的应用程序的包名称。

类型:字符串

常量值:“android.content.extra.PACKAGE_NAME”

EXTRA_REQUEST_BUNDLE

Added in API level 21
String EXTRA_REQUEST_BUNDLE

请求包在 ACTION_REQUEST_PERMISSION广播中传递。

类型: PersistableBundle

常量值:“android.content.extra.REQUEST_BUNDLE”

EXTRA_REQUEST_ID

Added in API level 21
String EXTRA_REQUEST_ID

请求ID在 ACTION_REQUEST_PERMISSION广播中传递。

类型:字符串

常量值:“android.content.extra.REQUEST_ID”

EXTRA_REQUEST_TYPE

Added in API level 21
String EXTRA_REQUEST_TYPE

请求类型在 ACTION_REQUEST_PERMISSION广播中传递。

类型:字符串

常量值:“android.content.extra.REQUEST_TYPE”

EXTRA_RESPONSE_BUNDLE

Added in API level 21
String EXTRA_RESPONSE_BUNDLE

包含管理员对特定请求的响应。 该软件包至少包含以下信息:

类型: PersistableBundle

常量值:“android.content.extra.RESPONSE_BUNDLE”

META_DATA_APP_RESTRICTIONS

Added in API level 21
String META_DATA_APP_RESTRICTIONS

清单中指向包含应用程序可用限制的XML文件的元数据条目的名称。

也可以看看:

常量值:“android.content.APP_RESTRICTIONS”

REQUEST_KEY_APPROVE_LABEL

Added in API level 21
String REQUEST_KEY_APPROVE_LABEL

请求包中包含的请求批准按钮标签的键。

可选,可以显示为对话框中的正面按钮上的标签或呈现给批准请求的管理员的通知。

类型:字符串

常量值:“android.request.approve_label”

REQUEST_KEY_DATA

Added in API level 21
String REQUEST_KEY_DATA

请求数据包中包含的请求数据的密钥。

可选,通常用于标识要引用的特定数据,例如电影或书籍的唯一标识符。 这不是用于显示目的,更像是一个cookie。 该值返回到EXTRA_RESPONSE_BUNDLE

类型:字符串

常量值:“android.request.data”

REQUEST_KEY_DENY_LABEL

Added in API level 21
String REQUEST_KEY_DENY_LABEL

包含在请求包中的请求拒绝按钮标签的键。

可选,可以显示为对话框中的否定按钮上的标签或呈现给批准请求的管理员的通知。

类型:字符串

常量值:“android.request.deny_label”

REQUEST_KEY_ICON

Added in API level 21
String REQUEST_KEY_ICON

包含在请求包中的请求图标的键。

可选,显示在批准请求的管理员的请求消息旁边。 内容必须是压缩图像,如PNG或JPEG,作为字节数组。

类型:byte []

常量值:“android.request.icon”

REQUEST_KEY_ID

Added in API level 21
String REQUEST_KEY_ID

包含在请求包中的请求ID的密钥。

应用生成的请求ID在接收到响应时识别特定的请求。 该值返回到EXTRA_RESPONSE_BUNDLE

类型:字符串

常量值:“android.request.id”

REQUEST_KEY_MESSAGE

Added in API level 21
String REQUEST_KEY_MESSAGE

请求包中包含的请求消息的密钥。

必需的,显示为提交给批准请求的管理员的通知或对话框中的实际消息。

类型:字符串

常量值:“android.request.mesg”

REQUEST_KEY_NEW_REQUEST

Added in API level 21
String REQUEST_KEY_NEW_REQUEST

发布请求包中包含的新请求的密钥。 如果此设置为true,则限制提供程序必须发出新的请求。 如果它为false或未指定,那么限制提供程序可以返回具有相同requestId的缓存响应(如果可用)。 如果没有缓存响应,它将向管理员发出一个新响应。

类型:布尔值

常量值:“android.request.new_request”

REQUEST_KEY_TITLE

Added in API level 21
String REQUEST_KEY_TITLE

包含在请求包中的请求标题密钥。

可选,通常用作提交给批准请求的管理员的任何通知或对话的标题。

类型:字符串

常量值:“android.request.title”

REQUEST_TYPE_APPROVAL

Added in API level 21
String REQUEST_TYPE_APPROVAL

针对简单问题的请求类型,带有可能的标题和图标。

必需的密钥是: REQUEST_KEY_MESSAGE

可选键是 REQUEST_KEY_DATAREQUEST_KEY_ICONREQUEST_KEY_TITLEREQUEST_KEY_APPROVE_LABELREQUEST_KEY_DENY_LABEL

常量值:“android.request.type.approval”

RESPONSE_KEY_ERROR_CODE

Added in API level 21
String RESPONSE_KEY_ERROR_CODE

发送到应用程序的响应包中的可选错误代码的关键字。

类型:int

可能的值: RESULT_ERROR_BAD_REQUESTRESULT_ERROR_NETWORK或者 RESULT_ERROR_INTERNAL

常量值:“android.response.errorcode”

RESPONSE_KEY_MESSAGE

Added in API level 21
String RESPONSE_KEY_MESSAGE

发送到应用程序的响应包中的可选消息的关键字。

类型:字符串

常量值:“android.response.msg”

RESPONSE_KEY_RESPONSE_TIMESTAMP

Added in API level 21
String RESPONSE_KEY_RESPONSE_TIMESTAMP

管理员响应权限请求时的可选时间戳的键。 自1970年1月1日00:00:00开始,以毫秒为单位。

类型:长

常量值:“android.response.timestamp”

RESPONSE_KEY_RESULT

Added in API level 21
String RESPONSE_KEY_RESULT

发送给应用程序的响应包中的响应结果的关键字,用于许可请求。 它表示请求的状态。 在某些情况下,附加消息可能在RESPONSE_KEY_MESSAGE可用,以显示给用户。

类型:int

可能的值: RESULT_APPROVEDRESULT_DENIEDRESULT_NO_RESPONSERESULT_UNKNOWN_REQUEST或者 RESULT_ERROR

常量值:“android.response.result”

RESULT_APPROVED

Added in API level 21
int RESULT_APPROVED

指示请求已被批准的响应结果值。

常数值:1(0x00000001)

RESULT_DENIED

Added in API level 21
int RESULT_DENIED

指示请求被拒绝的响应结果值。

常量值:2(0x00000002)

RESULT_ERROR

Added in API level 21
int RESULT_ERROR

表示错误状态的响应结果值。 对于密钥RESPONSE_KEY_ERROR_CODE ,响应包中可能有其他错误代码。 对于密钥RESPONSE_KEY_MESSAGE ,响应包中可能还有相关的错误消息。

常量值:5(0x00000005)

RESULT_ERROR_BAD_REQUEST

Added in API level 21
int RESULT_ERROR_BAD_REQUEST

错误代码表明请求存在问题。

存储在响应包中的 RESPONSE_KEY_ERROR_CODE字段中。

常数值:1(0x00000001)

RESULT_ERROR_INTERNAL

Added in API level 21
int RESULT_ERROR_INTERNAL

错误代码表明存在内部错误。

存储在响应包中的 RESPONSE_KEY_ERROR_CODE字段中。

常量值:3(0x00000003)

RESULT_ERROR_NETWORK

Added in API level 21
int RESULT_ERROR_NETWORK

指示网络出现问题的错误代码。

存储在响应包中的 RESPONSE_KEY_ERROR_CODE字段中。

常量值:2(0x00000002)

RESULT_NO_RESPONSE

Added in API level 21
int RESULT_NO_RESPONSE

表示请求尚未收到响应的响应结果值。

常量值:3(0x00000003)

RESULT_UNKNOWN_REQUEST

Added in API level 21
int RESULT_UNKNOWN_REQUEST

当不是新请求时,表示请求未知的响应结果值。

常量值:4(0x00000004)

Public methods

convertRestrictionsToBundle

Added in API level 23
Bundle convertRestrictionsToBundle (List<RestrictionEntry> entries)

使用以下映射将限制列表转换为相应的捆绑包:

RestrictionEntry Bundle
TYPE_BOOLEAN putBoolean(String, boolean)
TYPE_CHOICE, TYPE_MULTI_SELECT putStringArray(String, String[])
TYPE_INTEGER putInt(String, int)
TYPE_STRING putString(String, String)
TYPE_BUNDLE putBundle(String, Bundle)
TYPE_BUNDLE_ARRAY putParcelableArray(String, Parcelable[])

Parameters
entries List: list of restrictions
Returns
Bundle

createLocalApprovalIntent

Added in API level 21
Intent createLocalApprovalIntent ()

Returns
Intent

getApplicationRestrictions

Added in API level 21
Bundle getApplicationRestrictions ()

返回适用于此应用程序的任何可用的应用程序特定限制集。

Returns
Bundle the application restrictions as a Bundle. Returns null if there are no restrictions.

getManifestRestrictions

Added in API level 21
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.

hasRestrictionsProvider

Added in API level 21
boolean hasRestrictionsProvider ()

由应用程序调用以检查是否存在活动的限制提供程序。 如果没有,则requestPermission(String, String, PersistableBundle)不可用。

Returns
boolean whether there is an active Restrictions Provider.

notifyPermissionResponse

Added in API level 21
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.

requestPermission

Added in API level 21
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.

Hooray!