android设置自己的锁屏界面:AndroidDeviceAdministration
android设置自己的锁屏界面:AndroidDeviceAdministration三.它是如何工作的下面的例子类型的应用程序 可以使用设备管理API:一.设备管理Android 2.2引入了企业应用程序提供支持 Android设备管理API。 设备管理API提供了设备 系统级管理功能。 这些api允许您创建安全性敏感的应用程序用于企业设置 例如 内置Android电子邮件应用程序利用了新的api来改善 交换的支持。 通过电子邮件应用程序中 管理员可以交换 执行密码策略——包括字母数字密码或数字 针 在设备管理员也可以远程擦除(即 恢复工厂默认值丢失或被盗的手机。 用户可以交换同步 他们的电子邮件和日历数据。二.设备管理API概述
最近研究了一下安全这一块的内容,当然,我是比较水的,所以也拿不出什么好知识点,但是有一些冷门的东西我还是可以聊聊的,就拿这个锁屏来说吧,我们现在市面上有一些一键锁屏的软件
我们可以看到,是数不胜数的,所以,其实他一开始使用的时候,都需要请求设备管理器
我们可以看到,只有当我们激活的时候,我们才可以使用它,那么,他到底是什么东西呢?其实,当我们激活之后,我们可以在我们手机的设置——安全——设备管理器里面看到他的所有信息
我们带着这个疑问,打开我们的android api指南看看
- 地址:http://www.android-doc.com/guide/topics/admin/device-admin.html
一.设备管理
Android 2.2引入了企业应用程序提供支持 Android设备管理API。 设备管理API提供了设备 系统级管理功能。 这些api允许您创建安全性敏感的应用程序用于企业设置 例如 内置Android电子邮件应用程序利用了新的api来改善 交换的支持。 通过电子邮件应用程序中 管理员可以交换 执行密码策略——包括字母数字密码或数字 针 在设备管理员也可以远程擦除(即 恢复工厂默认值丢失或被盗的手机。 用户可以交换同步 他们的电子邮件和日历数据。
二.设备管理API概述
下面的例子类型的应用程序 可以使用设备管理API:
- 电子邮件客户端。
- 远程擦除数据的安全应用程序
- 设备管理服务和应用程序。
三.它是如何工作的
你使用的设备管理API编写设备管理应用程序的用户 安装在他们的设备上。 设备管理应用程序执行所需的政策。
- 系统管理员写一个设备管理应用程序执行 远程/本地设备安全策略。 这些政策可能是硬编码的 应用程序或应用程序可以动态地从第三方获取政策服务器。
- 应用程序安装在用户的设备上。 但是Android确实目前没有一个自动配置解决方案。 系统管理员可能的一些方法分发应用程序用户如下:
- Google play
- 其他商店
- 其他方式,比如邮件或者网站
- 系统提示用户启用设备管理应用程序, 当发生这种情况取决于应用程序是如何实现的。
- 一旦用户启用设备管理应用程序 它们是其政策。遵守这些政策通常带来好处 比如 对敏感系统和数据的访问。
如果用户不启用设备管理应用程序 它仍然是在设备上 但是在一个不活跃的状态。 用户将不受其政策 他们将针对积极心态相反没有得到任何应用程序的例子 他们可能无法同步数据。
如果用户未能遵守政策(例如 如果一个用户设置一个 密码 违反了准则) 它是由应用程序来决定 如何处理这个问题。 然而 这通常会导致用户不 能同步数据。
如果一个设备试图连接到服务器 需要政策 在设备管理API 支持连接不会 被允许。 设备管理API目前并不允许部分 供应。 换句话说 如果一个设备(例如 一个遗留设备) 不支持所有的既定政策 允许没有办法 设备连接。
如果一个设备包含多个管理员启用应用程序 严格的政策 执行。 没有办法目标特定的管理 应用程序。
卸载现有设备管理应用程序中 用户需要 先注销程序作为管理员。
翻译有点蹩脚哈,但是大概的意思就是你激活之后他就是一个政策,但是你不激活,也是可以的,只是出于静止状态,卸载这个应用之前你就需要先注销设备管理权限
那我们应该怎么做呢?他的政策比较多,我们大致的看一下
四.一键锁屏
OK 我们说了这么多概念,倒不如直接用代码说明
- 接下来我们就跟随者文档来实现
其实官方文档说的十分的详细,首先我们要定义一个Receiver让他继承DeviceAdminReceiver,我们暂时不是实现它
package com.lgl.lockone; import android.app.admin.DeviceAdminReceiver; /** * 锁屏 * Created by LGL on 2016/7/24. */ public class LockReceiver extends DeviceAdminReceiver{ }
然后我们需要定义清单文件
<receiver android:name=".LockReceiver" 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>
这里有必要要说一下了,首先是label,说标题,这个应该大家都知道,然后是description描述,当你激活设备的时候就会去请求,你就可以看到了,最后要绑定一个权限文件,我们在res下new一个xml文件夹,新建一个device_admin_sample
<?xml version="1.0" encoding="utf-8"?> <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>
OK,这些做完了之后我们先去最简单的实现一下锁屏,需要用到DevicePolicyManager
package com.lgl.lockone; import android.app.admin.DevicePolicyManager; import android.content.Context; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { private Button btnLock; private DevicePolicyManager mDPM; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //设备政策管理器 mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); btnLock = (Button) findViewById(R.id.btnLock); btnLock.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //锁屏 mDPM.lockNow(); } }); } }
其实这里就一个按钮,然后去lockNow请求锁屏,但是你会发现,他报错了,提示是没有权限,这个权限可以不是用户的权限,我们去设备管理器里面看一下
这里,就有我们的应用了,上面就是我们在清单里面定义的标题和描述了,我们勾选上,再去实现锁屏,你会发现就可以了,这就是需要我们手动去打开了,但是用户大多数是不会知道这回事的,所以我们一启动程序我们应该就去激活,文档上其实也已经写了,我们来看
ComponentName mDeviceAdminSample = new ComponentName(this LockReceiver.class); intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN mDeviceAdminSample); intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION "我是不是很帅"); startActivity(intent);
然后我们再来看下效果
而且我们可以更改锁屏密码
//重置密码 mDPM.resetPassword("12345678" 0);
如果传空串那就说明不要密码,我们可以再次运行一下
OK 我们来看下主页的逻辑吧
package com.lgl.lockone; import android.app.admin.DevicePolicyManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { private Button btnLock; private DevicePolicyManager mDPM; private ComponentName mDeviceAdminSample; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mDeviceAdminSample = new ComponentName(this LockReceiver.class); //设备政策管理器 mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); btnLock = (Button) findViewById(R.id.btnLock); btnLock.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mDPM.isAdminActive(mDeviceAdminSample)) { //锁屏 mDPM.lockNow(); //重置密码 mDPM.resetPassword("123456" 0); } else { Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN mDeviceAdminSample); intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION "我是不是很帅"); startActivity(intent); } } }); } }
基本上没什么代码,如果大家有兴趣可以加群
通往Android的神奇之旅:555974449
Demo下载:http://download.csdn.net/detail/qq_26787115/9584891