Android API Guides---Administration

来源:互联网 发布:mac电脑电池显示叉号 编辑:程序博客网 时间:2024/05/16 15:42
如果您是管理员,您可以利用API和系统能力来管理Android设备和控制访问。
在ICS统一密钥存储访问

搭载Android 4.0(ICS)附带了一些改进,使其更容易为人们带来他们的个人的Android设备工作的。在这篇文章中,我们将看看密钥存储功能。

Andr​​oid 2.2通过提供Android设备管理API引入了对企业应用的支持。设备管理API的系统级提供了设备管理功能。这些API允许你创建在企业设置有用的安全感知应用程序,其中IT专业人士需要对员工的设备丰富的控制。例如,内置Android应用程序的电子邮件已经利用新的API,从而增强Exchange支持。通过电子邮件应用程序,Exchange管理员可以实施密码策略 - 包括字母数字密码或数字PIN码 - 跨设备。管理员还可以远程擦除(也就是,在恢复出厂默认值)丢失或被盗的手机。 Exchange用户可以同步他们的电子邮件和日历数据。


这份文件的目的是谁想要开发Android供电设备的企业解决方案的开发。它讨论了设备管理API提供给由搭载Android员工设备提供更强的安全性的各种功能。


注意有关建设工作方针控制器部署Android for Work信息,请参阅构建工作政策控制器。


设备管理API概述


以下是类型的可能使用设备管理API应用程序的示例:
 •电子邮件客户端。
•那些远程擦除安全应用程序。
•设备管理服务和应用。
 
它是如何工作的?
 
您可以使用设备管理API来编写用户安装在他们的设备设备管理应用程序。设备管理应用程序强制执行所需的政策。下面是它如何工作的:
 •系统管理员写道,实施远程/本地设备安全策略的设备管理应用程序。这些政策可能被硬编码到应用程序或应用程序可以动态地获取来自第三方服务器策略。
•应用程序安装在用户的设备。 Android版目前还没有一个自动化供应解决方案。是一些系统管理员会在应用程序分发给用户的方法如下:◦Google播放。
 从另一家商店◦Enabling安装。
 ◦Distributing通过其他手段,如电子邮件或网站的应用程序。


•系统会提示用户启用该设备管理应用程序。如何以及何时发生这种情况取决于应用程序是如何实现的。
 •一旦用户打开设备管理应用程序,它们都受到其政策。这些政策通常符合授予利益,如访问敏感系统和数据。
 
如果用户不启用该设备管理应用程序,它仍然在设备上,但处于非活动状态。用户将不会受到其政策,他们将反过来不会得到任何的应用程序的好处,例如,他们可能无法同步数据。
 
如果用户不遵从该策略(例如,如果用户设置违反准则密码),它是由应用程序来决定如何处理这个问题。然而,典型地,这将导致用户不能够同步数据。
 
如果某个设备试图连接到需要的设备管理API中不支持的政策服务器,连接不会被允许。设备管理API目前不允许部分配置。换句话说,如果一个设备(例如,传统设备)不支持的所有陈述的政策,也没有办法让设备进行连接。
 
如果设备包含多个启用管理应用程序,最严格的政策执行。有没有办法针对特定的管理应用程序。
 
要卸载现有设备管理应用程序,用户需要先注销该应用程序为管理员。


政策


在企业环境中,它往往是员工设备必须遵循一套严格的支配使用该设备的政策的情况下。设备管理API支持表1.注意设备管理API目前仅支持屏幕锁密码列出的策略:
 
表1.政策由设备管理API的支持。
 




政策


描述






启用密码


要求设备要求PIN或密码。






最小密码长度


设置所需的数字作为密码的字符。例如,您可能需要PIN或密码至少有六个字符。






需要字母数字密码


要求密码有字母和数字的组合。它们可以包括符号字符。






需要复杂的密码


要求密码必须至少包含一个字母,数位和一个特殊符号。介绍了Android 3.0的。






在密码所需的最小字母
 
最小数量的密码为所有管理员或一个特定需要的字母。介绍了Android 3.0的。






在密码所需的最小小写字母


最小数量的密码为所有管理员或特定的一个需要小写字母。介绍了Android 3.0的。






在密码所需的最小非字母字符


在密码为所有管理员或一个特定的要求非字母字符的最小数目。介绍了Android 3.0的。






在密码所需的最小数字位数


最小数量的密码为所有管理员或特定的一个需要的数值数字。介绍了Android 3.0的。






在密码所需的最小符号


最小号的密码,所有的管理员或特定的一个必需的符号。介绍了Android 3.0的。






在密码所需的最小大写字母


最小数的密码,所有的管理员或特定的一个必需的大写字母。介绍了Android 3.0的。






密码过期超时


当密码将过期,表示为当一个设备管理员设置过期超时以毫秒为单位的增量。介绍了Android 3.0的。






密码历史记录限制


此策略可以防止用户重用的最后n唯一的密码。此策略通常用于结合setPasswordExpirationTimeout(),这迫使用户在指定的时间量已过去之后更新其密码。介绍了Android 3.0的。






最大密码尝试失败


指定设备湿巾其数据之前用户可以多少次输入错误密码。设备管理API还允许管理员对设备远程重置到出厂默认值。这种固定的情况下,在设备丢失或被盗的数据。






最大不活动时间锁定


设置,因为用户的时间长度最后触摸屏幕或设备锁定屏幕前,按下按钮。发生这种情况时,用户需要再次输入其PIN或密码才可以使用他们的设备和访问数据。的值可以是1到60分钟之间。
 




需要存储加密


指定该存储区应该被加密,如果设备支持它。介绍了Android 3.0的。
 




禁用摄像头


指定相机应该被禁用。需要注意的是,这并不必须是一个永久禁用。照相机可以动态地基于上下文,时间启用/禁用,等等。介绍了Android 4.0的。




其他特性


除了支持上述表中列出的策略,设备管理API可以让你做到以下几点:
 •提示用户设置新密码。
•锁定装置立即生效。
•擦拭设备的数据(也就是,将设备恢复到出厂默认设置)。
 
示例应用程序


本文档中使用的示例基于设备管理API样本,这是(通过Android SDK管理器中可用)包含在SDK样本中,位于您的系统上为<sdk_root> / ApiDemos /应用/ src目录/主/ JAVA / COM /例子/安卓/的API /应用/ DeviceAdminSample.java。


示例应用程序提供的设备管理功能的演示。它提出了一个用户界面,让他们能够在设备管理应用程序的用户。一旦启用了该应用程序,他们可以使用这些按钮在用户界面中执行以下操作:
 •设置密码质量。
•指​​定用户的口令的要求,如最小长度,它必须包含数字字符的最小数目,等等。
•设置密码。如果密码不符合规定的政策,系统将返回一个错误。
•将擦除设备之前怎么会出现很多失败的密码尝试(即,恢复到出厂设置)。
 •设置密码将如何从现在开始不久到期。
 •设置密码历史长度(长度指的是存储在历史旧密码的数量)。这样可以防止用户重用他们以前使用的最后n个密码之一。
 •指​​定存储区域应该被加密,如果设备支持它。
•设置可在设备锁定前经过的时间处于非活动状态的最高金额。
•立即设备锁。
•擦拭设备的数据(也就是,恢复出厂设置)。
•禁用摄像头。


图1.示例应用程序的屏幕截图
开发一个设备管理中的应用
系统管理员可以使用设备管理API来编写强制执行远程/本地设备安全策略强制执行的申请。本节总结参与创建的设备管理应用程序的步骤。
创建清单
要使用设备管理API,应用程序的清单必须包括以下内容:•DeviceAdminReceiver的子类,包括以下内容:◦TheBIND_DEVICE_ADMIN许可。
向ACTION DEVICE_ADMIN启用意图做出回应◦The能力,在清单中表示为一个意图过滤器。
•在元数据使用的安全策略的声明。
下面是从设备管理样品清单的摘录:

<activity android:name=".app.DeviceAdminSample"            android:label="@string/activity_sample_device_admin">    <intent-filter>        <action android:name="android.intent.action.MAIN" />        <category android:name="android.intent.category.SAMPLE_CODE" />    </intent-filter></activity><receiver android:name=".app.DeviceAdminSample$DeviceAdminSampleReceiver"        android:label="@string/sample_device_admin"        android:description="@string/sample_device_admin_description"        android:permission="android.permission.BIND_DEVICE_ADMIN">    <meta-data android:name="android.app.device_admin"            android:resource="@xml/device_admin_sample" />    <intent-filter>        <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />    </intent-filter></receiver>
需要注意的是:•下列属性指的是示例应用程序驻留在ApiDemos / RES /价值/ strings.xml中的字符串资源。有关资源的详细信息,请参阅应用程序资源。 ◦android:标签=“@字符串/活性样品device_admin”指的是该活动的用户可读的标签。
◦android:标签=“@字符串/ sample_device_admin”是指为允许用户可读的标签。
◦android:说明=“@字符串/样品device_admin说明”是指权限的用户可读描述。一个描写的特征通常比标签更长,更丰富。
•安卓:权限=“android.permission.BIND_DEVICE_ADMIN”是一个DeviceAdminReceiver子类必须有,以确保只有系统可以与接收器交互(没有应用程序可以被授予这个权限)的权限。这可以防止其他应用程序滥用你的设备管理应用。 •android.app.action.DEVICE_ADMIN_ENABLED是一个DeviceAdminReceiver子类必须处理被允许管理设备的主要操作。这是设置当用户使设备管理应用程序接收器。您的代码通常处理这onEnabled()。要支持,接收方也必须要求BIND_DEVICE_ADMIN权限,以便其他应用程序不能滥用它。
•当用户启用了设备管理应用程序,给出了接收者的许可,以响应特定系统事件的广播执行操作。当合适的事件发生时,应用程序可以征收的政策。例如,如果用户试图设置不符合策略要求一个新的密码,应用程序可提示用户选择一个不同的密码确实满足要求。
•安卓:资源=“@ XML / device_admin_sample”声明中的元数据使用的安全策略。元数据提供了如解析由DeviceAdminInfo类特定于设备管理员的其他信息,。以下是device_admin_sample.xml的内容:

<device-admin xmlns:android="http://schemas.android.com/apk/res/android">  <uses-policies>    <limit-password />    <watch-login />    <reset-password />    <force-lock />    <wipe-data />    <expire-password />    <encrypted-storage />    <disable-camera />  </uses-policies></device-admin>
在设计你的设备管理应用程序,你并不需要包括所有的政策,只是有关你的应用程序的人。对于manifest文件的更多讨论,请参阅Android开发者指南。
实施代码
设备管理API包括以下类:DeviceAdminReceiver基类实现设备管理组件。此类提供用于解释由该系统发送的原始意图动作的便利性。您的设备管理应用程序必须包括DeviceAdminReceiver subclass.DevicePolicyManager一种用于管理强制在设备上的政策类。这个类的大多数客户端必须公布该用户目前已经启用了DeviceAdminReceiver。 instancesDeviceAdminInfo这个类是用于为设备管理员组件指定的元数据管理DevicePolicyManager一个或多个DeviceAdminReceiver政策。
这些类提供了一个功能齐全的设备管理应用程序的基础。本节的其余部分将介绍如何使用DeviceAdminReceiver和DevicePolicyManager API编写的设备管理应用程序。
子类DeviceAdminReceiver
要创建一个设备管理应用程序,你必须继承DeviceAdminReceiver。该DeviceAdminReceiver类包含了一系列的回调,当发生特定事件时被触发的。
在它的子类DeviceAdminReceiver,示例应用程序只显示在响应特定事件Toast通知。例如:

public class DeviceAdminSample extends DeviceAdminReceiver {    void showToast(Context context, String msg) {        String status = context.getString(R.string.admin_receiver_status, msg);        Toast.makeText(context, status, Toast.LENGTH_SHORT).show();    }    @Override    public void onEnabled(Context context, Intent intent) {        showToast(context, context.getString(R.string.admin_receiver_status_enabled));    }    @Override    public CharSequence onDisableRequested(Context context, Intent intent) {        return context.getString(R.string.admin_receiver_status_disable_warning);    }    @Override    public void onDisabled(Context context, Intent intent) {        showToast(context, context.getString(R.string.admin_receiver_status_disabled));    }    @Override    public void onPasswordChanged(Context context, Intent intent) {        showToast(context, context.getString(R.string.admin_receiver_status_pw_changed));    }...}
使应用程序
 
其中一个主要事件的设备管理应用程序要处理的是用户启用应用程序。用户必须明确使应用程序如要执行的策略。如果用户选择不使应用它仍然会存在于设备上,但其政策将不被执行,并且用户不会得到任何的应用程序的优点。
 
当用户执行触发ACTION_ADD_DEVICE_ADMIN意图的动作使应用程序的过程开始。在示例应用程序,当用户点击启用管理员复选框出现这种情况。


当用户点击启用管理员复选框,则显示变为提示用户激活设备管理应用程序,如图2。
 
图2.示例应用程序:激活应用程序


下面是当用户点击启用管理员复选框该被执行的代码。这具有触发onPreferenceChange()回调的效果。当这种偏好的价值已经被用户改变,即将被设置和/或持续回调被调用。如果用户启用应用程序时,显示将变为提示用户激活设备管理应用程序,如图2否则,设备管理应用程序被禁用

@Override        public boolean onPreferenceChange(Preference preference, Object newValue) {            if (super.onPreferenceChange(preference, newValue)) {                return true;            }            boolean value = (Boolean) newValue;            if (preference == mEnableCheckbox) {                if (value != mAdminActive) {                    if (value) {                        // Launch the activity to have the user enable our admin.                        Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);                        intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample);                        intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,                                mActivity.getString(R.string.add_admin_extra_app_text));                        startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN);                        // return false - don't update checkbox until we're really active                        return false;                    } else {                        mDPM.removeActiveAdmin(mDeviceAdminSample);                        enableDeviceCapabilitiesArea(false);                        mAdminActive = false;                    }                }            } else if (preference == mDisableCameraCheckbox) {                mDPM.setCameraDisabled(mDeviceAdminSample, value);                ...            }            return true;        }
行intent.putExtra(DevicePolicyManager.EXTRA DEVICE_ADMIN,mDeviceAdminSample)指出mDeviceAdminSample(这是一个DeviceAdminReceiver成分)是目标的策略。此行调用在图2中,它通过添加设备管理员向系统指导用户(或允许他们拒绝它)中所示的用户界面。
当应用程序需要执行是要启用的设备管理应用程序的队伍操作,确认该应用程序是活动的。要做到这一点,它使用DevicePolicyManager方法isAdminActive()。请注意,DevicePolicyManager方法isAdminActive()以DeviceAdminReceiver组件作为它的参数:

DevicePolicyManager mDPM;...private boolean isActiveAdmin() {    return mDPM.isAdminActive(mDeviceAdminSample);}
管理策略
 
DevicePolicyManager是强制管理设备上的政策一个公共类。 DevicePolicyManager管理一个或多个DeviceAdminReceiver实例策略。


你得到的句柄DevicePolicyManager如下:

DevicePolicyManager mDPM =    (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);

本节将介绍如何使用DevicePolicyManager来执行管理任务:
 •设置密码策略
•设置设备锁定
•执行数据擦除
 
设置密码策略
 
DevicePolicyManager包括用于设置和执行设备密码策略的API。在设备管理API,密码只适用于屏幕锁定。介绍了常用的密码相关的任务。


为设备设置密码
 
此代码显示用户界面提示用户设置密码:

Intent intent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD);startActivity(intent);
设置密码质量
密码质量可以是以下DevicePolicyManager常量之一:
PASSWORD_QUALITY ALPHABETIC用户必须输入至少含有字母(或其它符号)characters.PASSWORD QUALITY_ALPHANUMERICThe用户必须输入至少含有数字和字母(或其它符号)characters.PASSWORD_QUALITY_NUMERICThe用户的密码必须输入至少含有数字密码的密码字符。 PASSWORD_QUALITY_COMPLEXThe用户必须输入至少含有一个字母,一个数位和一个特殊symbol.PASSWORD_QUALITY_SOMETHINGThe策略的密码需要某种密码的,但并不关心它is.PASSWORD_QUALITY_UNSPECIFIED策略具有用于密码没有要求。
例如,这是你将如何设置密码策略需要字母数字密码:

DevicePolicyManager mDPM;ComponentName mDeviceAdminSample;...mDPM.setPasswordQuality(mDeviceAdminSample, DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC);
设置最小密码长度
 
您可以指定一个密码必须至少指定的最小长度。 例如:

DevicePolicyManager mDPM;ComponentName mDeviceAdminSample;int pwLength;...mDPM.setPasswordMinimumLength(mDeviceAdminSample, pwLength);
设置最大密码尝试失败
 
您可以设置允许的密码尝试失败的最大数量擦除设备之前(即重置为出厂设置)。 例如:

DevicePolicyManager mDPM;ComponentName mDeviceAdminSample;int maxFailedPw; ...mDPM.setMaximumFailedPasswordsForWipe(mDeviceAdminSample, maxFailedPw);
设置密码过期超时
与Android3.0开始,您可以使用set密码到期超时()方法来设置时,密码将过期,表示为当一个设备管理员设置过期超时以毫秒为单位的增量。 例如:

DevicePolicyManager mDPM;ComponentName mDeviceAdminSample;long pwExpiration;...mDPM.setPasswordExpirationTimeout(mDeviceAdminSample, pwExpiration);
根据病史限制密码
与Android3.0开始,您可以使用setPasswordHistoryLength()方法来限制用户重新使用旧密码的能力。此方法需要的长度参数,它指定许多旧密码的存储方式。当此政策是积极的,用户无法输入的最后n密码相匹配的新密码。这样可以防止用户一遍又一遍使用相同的密码。该策略通常用于连同一组密码到期超时(),这将强制用户在指定的时间过去后,更新他们的密码。
例如,该段禁止用户重复使用任何他们的最后5密码:

DevicePolicyManager mDPM;ComponentName mDeviceAdminSample;...long timeMs = 1000L*Long.parseLong(mTimeout.getText().toString());mDPM.setMaximumTimeToLock(mDeviceAdminSample, timeMs);
您也可以通过编程告诉设备,立即锁定:

DevicePolicyManager mDPM;mDPM.lockNow();
执行数据擦除


您可以使用DevicePolicyManager方法wipeData()将设备重置为出厂设置。如果设备丢失或被盗,这是很有用的。经常擦拭设备的决定是得到满足一定条件的结果。例如,你可以使用setMaximumFailedPasswordsForWipe()声明,设备应密码尝试失败的具体数量后擦拭。
 
你擦数据如下:

DevicePolicyManager mDPM;mDPM.wipeData(0);
该wipeData()方法作为参数的附加选项的位掩码。目前该值必须是0。
禁用摄像头
与Android4.0开始,您可以禁用摄像头。需要注意的是,这并不必须是一个永久禁用。照相机可以动态地基于上下文,时间启用/禁用,等等。
您可以控制摄像机是否通过使用setCamera残疾人()方法关闭。例如,该片段设置相机根据复选框设置来启用或禁用:

private CheckBoxPreference mDisableCameraCheckbox;DevicePolicyManager mDPM;ComponentName mDeviceAdminSample;...mDPM.setCameraDisabled(mDeviceAdminSample, mDisableCameraCheckbox.isChecked());
存储加密
 
与Android3.0开始,您可以使用setStorageEncryption()方法来设置需要的存储区域,如果支持的加密策略。


例如:

DevicePolicyManager mDPM;ComponentName mDeviceAdminSample;...mDPM.setStorageEncryption(mDeviceAdminSample, true);
查看设备管理API样本如何启用加密存储一个完整的例子。

0 0
原创粉丝点击