`
fanfq
  • 浏览: 270795 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Android - Device Administration

 
阅读更多

从 Android 2.2 (API level 8)版本开始,Android平台通过设备管理API提供了系统级的设备管理能力。

这节课程将会介绍如何创建一个安全相关的程序,该程序通过执行设备管理策略来保护设备信息的安全。具体来说,该程序可以配置锁屏密码的强度,通过该配置来保护敏感的信息。这个和大家在公司使用的Windows电脑一样, 公司会定义好电脑密码的策略 — 比如要求是大于8位同时包含3种不同类型字符的密码 — 这样来保证电脑不会轻易的被破解掉密码,从而保护电脑里面的资料。

定义和声明您的策略

首先,需要定义支持的策略种类。设备策略包含锁屏密码强度、密码失效时间 等。

您必须在 res/xml/device_admin.xml 文件中定义使用的策略集合,程序会应用该策略到设备上。同时在Manifest文件中需要引用声明的策略集合。

 

每个声明的策略都对应DevicePolicyManager类中的一个或者几个相关的函数。如果一个程序尝试调用一个没有在XML文件中声明过的策略函数,会抛出一个 SecurityException 异常。如果程序想管理其他类型的策略,可以使用其他的权限 — 比如 force-lock。在后面您会看到,在设备管理器的激活流程中会有一个系统界面告诉用户您所声明的策略集合列表。

下面的代码在res/xml/device_admin.xml文件中定义了limit password 策略:

1
2
3
4
5
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-policies>
        <limit-password />
    </uses-policies>
</device-admin>

在 manifest 文件中引用定义的策略:

1
2
3
4
5
6
7
8
<receiver android:name=".Policy$PolicyAdmin"
    android:permission="android.permission.BIND_DEVICE_ADMIN">
    <strong><meta-data android:name="android.app.device_admin"
        android:resource="@xml/device_admin" /></strong>
    <intent-filter>
        <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
    </intent-filter>
</receiver>

创建 Device Administration Receiver

当您定义的策略事件发生的时候会通知您创建的这个设备管理器Receiver。可以根据情况覆盖(Override)需要的回调函数。

在Device Admin这个示例程序中,如果用户撤销了设备管理器,示例程序所配置的策略信息将会清除。您需要考虑实现符合您的使用情况的业务逻辑。例如,程序可以删除一些敏感信息来减轻安全风险、还可以禁用远程同步功能 等。

不要忘了在manifest文件中注册您的Receiver。

1
2
3
4
5
6
7
8
9
10
11
public static class PolicyAdmin extends DeviceAdminReceiver {
 
    @Override
    public void onDisabled(Context context, Intent intent) {
        // Called when the app is about to be deactivated as a device administrator.
        // Deletes previously stored password policy.
        super.onDisabled(context, intent);
        SharedPreferences prefs = context.getSharedPreferences(APP_PREF, Activity.MODE_PRIVATE);
        prefs.edit().clear().commit();
    }
}

激活设备管理器

在执行任何策略之前,用户需要手工的激活设备管理器。下面的代码演示了如何触发设置界面来让用户激活您的设备管理器程序。包含一个介绍文本内容告诉用户为啥您的程序需要激活为设备管理器是个不错的选择, 通过在Intent中设置 EXTRA_ADD_EXPLANATION 字段。

 

Figure 1. 在用户激活界面提供关于您的设备策略的描述信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
if (!mPolicy.isAdminActive()) {
 
    Intent activateDeviceAdminIntent =
        new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
 
    activateDeviceAdminIntent.putExtra(
        DevicePolicyManager.EXTRA_DEVICE_ADMIN,
        mPolicy.getPolicyAdmin());
 
    // It is good practice to include the optional explanation text to
    // explain to user why the application is requesting to be a device
    // administrator. The system will display this message on the activation
    // screen.
    activateDeviceAdminIntent.putExtra(
        DevicePolicyManager.EXTRA_ADD_EXPLANATION,
        getResources().getString(R.string.device_admin_activation_message));
 
    startActivityForResult(activateDeviceAdminIntent,
        REQ_ACTIVATE_DEVICE_ADMIN);
}

如果用户选择 “Activate 激活” 您的程序为设备管理器,然后就可以开始配置和应用您的策略了。

另外您的程序还要处理其他情况,比如用户点击了取消(Cancel)按钮、或者按了返回键、或者用户按了Home键。因此需要在设置策略Activity的
onResume() 函数中处理这种情况。如果需要的话再次把激活设备管理员的界面显示给用户。

实现设备策略控制器

一旦成功了激活为设备管理器后,程序就可以应用定义的策略了。需要注意的是,随着Android的发展,在新的版本中可能会添加新的策略。所以在应用策略之前判断下当前设备的版本是否支持该策略是比较保险的做法。例如, Password Minimum
Upper Case policy(密码最少包含几个大写字符的策略)是在 API level 11 (Honeycomb) 版本引入的。下面的代码展示了如何在运行时检测版本信息:

1
2
3
4
5
6
7
8
9
DevicePolicyManager mDPM = (DevicePolicyManager)
        context.getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName mPolicyAdmin = new ComponentName(context, PolicyAdmin.class);
...
mDPM.setPasswordQuality(mPolicyAdmin, PASSWORD_QUALITY_VALUES[mPasswordQuality]);
mDPM.setPasswordMinimumLength(mPolicyAdmin, mPasswordLength);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    mDPM.setPasswordMinimumUpperCase(mPolicyAdmin, mPasswordMinUpperCase);
}

现在程序可以执行策略了。但是目前程序还没有访问当前使用的锁屏密码,不知道用户当前的设置是否符合您定义的策略要求。通过Device Policy Manager API可以判断当前用户设置的密码是否符合您定义的策略。如果发现当前的密码不符合安全策略,设备管理API不会自动的去处理这种情况。您的程序需要自己启动设置程度中的修改密码界面,例如:

1
2
3
4
5
6
7
if (!mDPM.isActivePasswordSufficient()) {
    ...
    // Triggers password change screen in Settings.
    Intent intent =
        new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD);
    startActivity(intent);
}

通常情况下,用户可以自由的选择任何一种锁屏机制,例如 None(无)、 Pattern(图案)、PIN (numeric)、或者 Password密码 (alphanumeric)。 当选择了一种密码策略,上面的包含强度比较弱的锁屏机制就会被禁用。例如,如果配置了“Numeric”类型的密码强度,用户只能使用 PIN (numeric) 和 Password (alphanumeric) 这两种锁屏机制。

当设置的密码通过了配置的策略,程序就允许访问敏感的内容了。

1
2
3
4
5
6
7
8
9
10
11
if (!mDPM.isAdminActive(..)) {
    // Activates device administrator.
    ...
} else if (!mDPM.isActivePasswordSufficient()) {
    // Launches password set-up screen in Settings.
    ...
} else {
    // Grants access to secure content.
    ...
    startActivity(new Intent(context, SecureActivity.class));
}

本文出自 云在千峰,转载时请注明出处及相应链接。

本文永久链接: http://blog.chengyunfeng.com/?p=325



分享到:
评论

相关推荐

    android-21.zip

    6. **设备管理器API**:Android 5.0引入了Device Administration API,使企业可以更好地管理和保护其设备,提供安全策略,如远程锁定、擦除数据等功能。 7. **OpenGL ES 3.1**:图形处理能力得到提升,支持了最新的...

    android-7.1-cdd.pdf

    3. 设备管理(Device Administration): - 设备配置(Device Provisioning):包括设备所有者配置(Device Owner Provisioning)和托管配置文件(Managed Profile Provisioning),以及托管配置文件支持(Managed ...

    device owner超级管理员 DeviceAdminSample-master.zip

    `DeviceOwner`的实现基于Android的`Device Administration API`,这是一个允许开发者创建管理应用的框架。这些应用可以在用户不知情的情况下执行特定的管理任务,如锁定设备、擦除数据、限制功能等。在`20210625`...

    ANDROID 8.1 cdd

    为了保证系统和应用的安全性,CDD文档也包含了一些关于设备管理(Device Administration)、可访问性(Accessibility)和文本到语音(Text-to-Speech)等方面的要求。这些规范确保了设备的可管理性、易用性和辅助...

    android-kiosk-mode:例子

    3. **Device Administration API**: Android提供了设备管理API,允许应用程序注册为设备管理员,从而能够执行更强大的操作,如锁定设备、清除数据等。要启用Kiosk模式,你需要创建一个DeviceAdminReceiver类并配置...

    Android4.4静默安装应用的一种实现方式

    在Android中,通过Device Administration API,开发者可以创建设备管理器应用,这些应用能够获得额外的控制权,包括静默安装应用。以下是一些关键步骤: 1. **创建设备管理器应用**:首先,你需要创建一个实现了`...

    Android项目实战--手机卫士09--防盗逻辑以及设置向导的完成_修改

    这涉及使用Android的Device Administration API,注册设备管理器并实现相关接口。 3. 遥控操作响应:手机卫士需要监听来自远程服务器的指令,当接收到特定命令时执行相应操作。这需要实现BroadcastReceiver以监听...

    Android Application Security Essentials

    Device Administration 17 Summary 17 Chapter 2: Application Building Blocks 19 Application components 19 Activity 20 Activity declaration 20 Saving the Activity state 21 Saving user data 23 Service 23 ...

    CommonsWare.The.Busy.Coders.Guide.to.Android.Development.Version.8.2.2017

    Device Administration Basic Use of Sensors Printing and Document Generation Dealing with Different Hardware Writing and Using Parcelables Responding to URLs Plugin Patterns PackageManager Tricks ...

    Android高级应用源码-android一键锁屏源代码,android4.2工作正常.zip

    4. **Device Administration API**:为了实现更强大的锁屏控制,开发者可能使用了Android的设备管理API。通过注册为设备管理员,应用可以执行如强制锁屏、清除数据等操作,但需要用户授权。 5. **Activity**:可能...

    Android高级应用源码-android 零权限发送短信,支持android 4.0以上版本。.zip

    5. **使用设备管理器(Device Administration)**:设备管理器API允许应用在用户同意成为设备管理员后获得额外的权限。尽管这通常用于企业级应用,但理论上也可以用来发送短信。 6. **利用系统漏洞**:如果源码使用...

    Android 一键锁屏

    总之,"一键锁屏"应用通过Android的Device Administration API实现了快速锁屏的功能,这涉及到权限管理、设备管理器的使用、事件处理等多个Android开发核心知识点。源码分析有助于开发者深入理解这些概念并学习如何...

    Android开启超级管理员权限源码(Android Studio Module)

    然而,对于非root设备,Android提供了一种称为设备管理器(Device Administration API)的方式来实现类似的功能,尽管它的权限级别远低于超级用户。 设备管理器API允许应用成为设备管理员,从而执行一些受限制的...

    Android设置APP无法卸载

    在Android系统中,开发者可以通过利用Android的设备管理器(Device Administration API)来实现应用程序的保护,使得普通用户无法轻易卸载。这是一种为了增强安全性或强制企业应用策略的常见做法,尤其适用于企业...

    安卓安装卸载相关-Android利用设备管理器实现APP无法卸载功能.rar

    在安卓系统中,开发者可以通过利用设备管理器(Device Administration API)来实现应用程序的保护机制,使其变得难以或无法被用户常规方式卸载。这个技术主要适用于企业级应用,以确保公司的数据安全和应用策略得以...

    The Busy Coders Guide to Android Development最终版2019

    Device Administration Basic Use of Sensors Printing and Document Generation Basic Bluetooth RFCOMM Dealing with Different Hardware Writing and Using Parcelables Responding to URLs App Shortcuts ...

    Android手机防盗参考(详细注释)

    - Android提供了Device Administration API,允许应用成为设备管理员,从而可以执行更强大的操作,如锁定设备、清除数据等。需在应用中实现DeviceAdminReceiver,并在用户设置中激活。 5. **远程控制**: - 通过...

    android设备管理

    在Android系统中,设备管理(Device Administration)是一个重要的特性,它允许开发者创建安全的应用程序,以管理和保护企业级设备。这个功能特别适用于那些需要确保数据安全性和设备合规性的场景,如企业移动设备...

Global site tag (gtag.js) - Google Analytics