Android Device Administration 设备管理器——实现一键锁屏
Android Device Administration 设备管理器——实现一键锁屏
最近研究了一下安全这一块的内容,当然,我是比较水的,所以也拿不出什么好知识点,但是有一些冷门的东西我还是可以聊聊的,就拿这个锁屏来说吧,我们现在市面上有一些一键锁屏的软件
我们可以看到,是数不胜数的,所以,其实他一开始使用的时候,都需要请求设备管理器
我们可以看到,只有当我们激活的时候,我们才可以使用它,那么,他到底是什么东西呢?其实,当我们激活之后,我们可以在我们手机的设置——安全——设备管理器里面看到他的所有信息
我们带着这个疑问,打开我们的android api指南看看
一.设备管理
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
Android Device Administration 设备管理器——实现一键锁屏的更多相关文章
- Android简易实战教程--第五话《开发一键锁屏应用》
转载请注明出处:http://blog.csdn.net/qq_32059827/article/details/51860900 点击打开链接 Device Administration 对于这个应 ...
- Android简易实战教程--第六话《开发一键锁屏应用2·完成》
转载请注明出处:http://blog.csdn.net/qq_32059827/article/details/51885687点击打开链接 上一篇,初步开发了这个应用,功能都有了(见http:// ...
- Android一键锁屏APP
题记: 这个app完全是拾人牙慧,作为练手用的,其实没有什么原创的东西.当然,博客还是我自己写的,记录下来,对自己也算是一种成长吧. 转载请注明原文地址: http://www.cnblogs.com ...
- Android一键锁屏源码
APK下载 源程序下载 锁屏流程如下(参考于Android一键锁屏开发全过程[源码][附图]) 源码参考于一键锁屏 源码 一共有2个Java文件: package com.example.onekey ...
- android DevicePolicyManager实现一键锁屏
本文章一部分资料来源于网上 1.实现一键锁屏关键是DevicePolicyManager这个类,然后使用lockNow():方法. 2.DevicePolicyManager类,可以让你的做软件获得系 ...
- XC一键锁屏应用
XC一键锁屏,一键Android锁屏应用,彻底解放开关机键~ 下载地址: http://download.csdn.net/detail/jczmdeveloper/7329447
- 【WP 8.1开发】一键锁屏
在WP8的时候,关于如何关闭屏幕,国内外都有不少文章了,大家有兴趣地可以搜搜,很多,我就不给链接了,因为稍后我的例子中会有. 其实,关闭屏幕是调用了未开放的API,正因为这个API未开放的,不敢保证所 ...
- Android 7.0 以上保留数据去除锁屏密码的方法
在很多情况下,由于我们的疏忽,导致忘记了锁屏密码.也没有开启 USB 调试,内置存储中还有要保留的数据.我们需要在不清除数据的情况下删除锁屏密码.接下来我们就介绍该如何做. 注意事项 首先要注意,这个 ...
- 【Android N 7.1.1】 处于锁屏界面时可以转屏
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.ja ...
随机推荐
- HDU 5726 GCD 区间GCD=k的个数
GCD Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submis ...
- 阿里 & 酷家乐:实习生面试
最近海投了十家公司,暂时有阿里两面(已凉).酷家乐两面(大概凉了).网易一面.前两个都是基础知识发挥得还可以,两家公司二面都凉凉. 阿里一面(3.21 26min) 刚好买了中饭回宿舍打开正准备吃的时 ...
- 特殊权限 SUID、SGID、Sticky
摘录之----------QuintinX 一. 前提 本篇主要讲解SUID, SGID, Sticky三个权限的基本原理和应用. 为什么要使用特殊权限? 比如系统中假如有超过四类人然而每一类人都需要 ...
- 使用Aes对称加密解密Web.Config数据库连接串
现在很多公司开始为了保证数据库的安全性,通常会对Web.Config的数据库连接字符串进行加密.本文将介绍学习使用Aes加密解密数据库连接字符串.本文采用MySql数据库. AES概念简述 AES 是 ...
- [ Java学习基础 ] Java的抽象类与接口
一.抽象类 1. 抽象类 Java语言提供了两种类:一种是具体类:另一种是抽象子类. 2. 抽象类概念: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的 ...
- HTML中鼠标滚轮事件onmousewheel处理
滚轮事件是不同浏览器会有一点点区别,一个像Firefox使用DOMMouseScroll ,ff也可以使用addEventListener方法绑定DomMouseScroll事件,其他的浏览器滚轮事件 ...
- 修改hosts不必重启 立刻生效
打开命令提示符窗口执行以下命令: 显示DNS缓存内容 ipconfig /displaydns 删除DNS缓存内容 ipconfig /flushdns ps.电脑卡的话,先关机再开机(别直接重启)
- 消息中间件--ActiveMQ&JMS消息服务
### 消息中间件 ### ---------- **消息中间件** 1. 消息中间件的概述 2. 消息中间件的应用场景 * 异步处理 * 应用解耦 * 流量削峰 * 消息通信 --------- ...
- hasattr(),getattr(),setattr()的使用
# 首先你有一个command.py文件,内容如下,这里我们假若它后面还有100个方法 class MyObject(object): def __init__(self): self.x = def ...
- Lintcode392 Is Subsequence solution 题解
[题目描述] Given a string s and a string t, check if s is subsequence of t. You may assume that there is ...