This class is used to specify meta information of a device administrator component.
再不懂的可以在网上查下,以下是在网上查到的,贴出来:
DevicePolicyManager
这是设备管理的主类.通过它可以实现屏幕锁定、屏幕亮度调节、出厂设置等功能.
DeviceAdminReceiver
该类继承自 BroadcastReceiver . 从源码可以看到,其实就是实现了一个OnReceive方法,该方法中根据不同的Action,执行相应的操作. 比如,如果激活成功,那么Action就是ACTION_DEVICE_ADMIN_ENABLED, 据此调用 onEnabled 方法.
DeviceAdminInfo
包括设备信息,Info,就是Information嘛,呵,,乱猜也可以猜到,至于里面什么属性,到时候朋友们可以直接"."下就知道啦.
比如:
DeviceAdminReceiver.USES_POLICY_FORCE_LOCK , 这个就是本次要用的"强制锁定屏幕"的权限. 不过这些权限一般都直接通过XML文件来定义. 稍后你就会看到.
Android手机中手机屏幕的锁定方式有以下几种 ,不文字描述了,直接上图,看着爽
以下是拖的布局,因为只讲功能,界面就不说什么美观不美观了,拖三个按钮,三个按钮看按钮上的的文本内容就知道是用在什么地方的, 不多讲,今天先测试下系统锁,因为没学会走呢,就先不去学跑了,大伙跟着一起慢慢来,先从简单的开始吧.
界面效果如下:
点击第一个按钮会跳到权限提醒页面,如图所示:
上面这个页面只是提醒你你要激活的所有设备权限,点击激活后会跳回首页,再去点击系统锁使用时,就达到咱们的目的啦,吼吼。。如图所示
光看我做的效果可不行,大家别忘了在全局配置文件里面配置,不然报错的,添加以下代码:
<receiver
android:name\=".AdminReceiver"
android:description\="@string/description"
android:label\="@string/labelValue"
android:permission\="android.permission.BIND\_DEVICE\_ADMIN"
>
<meta-data
android:name\="android.app.device\_admin"
android:resource\="@xml/lockourscreen"/>
<intent-filter>
<action android:name="android.app.action.DEVICE\_ADMIN\_ENABLED" />
</intent-filter>
</receiver>
下面我贴出完整的代码,供朋友们学习使用,有不懂之处,可直接提出疑问,我们共同交流:
主类:
package com.xiaoma.www;
import com.xiaoma.www.R;
import android.app.Activity;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context; import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
/\*\*
\* @Title: DevicePolicyManagerDemoActivity.java
\* @Package com.xiaoma.www
\* @Description: 屏幕锁测试
\* @author MZH
\* @version V2.2
\*/
public class DevicePolicyManagerDemoActivity extends Activity {
private Button startPermissionBtn;
private Button stopPermissionBtn;
private Button sysLockBtn;
private DevicePolicyManager dpm;
private ComponentName componentName ;
/\*\* Called when the activity is first created. \*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//初始化
init();
}
/\*\*
\* 初始化实现
\*/
private void init(){
//资源声明定位
startPermissionBtn = (Button)findViewById(R.id.button1);
stopPermissionBtn \= (Button)findViewById(R.id.button2);
sysLockBtn \= (Button)findViewById(R.id.button3);
startPermissionBtn.setOnClickListener(listener);
stopPermissionBtn.setOnClickListener(listener);
sysLockBtn.setOnClickListener(listener);
//取得系统服务
dpm = (DevicePolicyManager)getSystemService(Context.DEVICE\_POLICY\_SERVICE);
componentName \= new ComponentName(this, AdminReceiver.class);
}
/\*\*
\* 按钮监听器的实现,此处小马讲下,在实现监听的时候不要在一个分支里面写太多逻辑处理
\* 分支只负责分支,不负责处理,要处理的话可以模块化,处理函数抽出去就可以了
\* 小马希望大家从一开始就养成个好习惯,吼吼..
\*/
private OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View v) {
//以下是三个按钮分别处理的事件实现
switch (v.getId()) {
case R.id.button1:
//开启设备权限
startDeviceManager();
break;
case R.id.button2:
//停止设备权限
stopDeviceManager();
break;
case R.id.button3:
//调用系统锁
sysLock();
break;
default:
break;
}
}
};
/\*\*
\* 启动设备管理权限
\*/
private void startDeviceManager(){
//添加一个隐式意图,完成设备权限的添加
//这个Intent (DevicePolicyManager.ACTION\_ADD\_DEVICE\_ADMIN)跳转到 权限提醒页面
//并传递了两个参数EXTRA\_DEVICE\_ADMIN 、 EXTRA\_ADD\_EXPLANATION
Intent intent = new Intent(DevicePolicyManager.ACTION\_ADD\_DEVICE\_ADMIN);
//权限列表
//EXTRA\_DEVICE\_ADMIN参数中说明了用到哪些权限,
intent.putExtra(DevicePolicyManager.EXTRA\_DEVICE\_ADMIN, componentName);
//描述(additional explanation)
//EXTRA\_ADD\_EXPLANATION参数为附加的说明
intent.putExtra(DevicePolicyManager.EXTRA\_ADD\_EXPLANATION, "--小马坏,小马爱,小马瓜瓜怪--");
startActivityForResult(intent, 0);
}
/\*\*
\* 禁用设备管理权限方法实现
\*/
private void stopDeviceManager(){
Log.i("XiaoMaGuo","------ unActiveManage ------");
boolean active = dpm.isAdminActive(componentName);
if (active) {
dpm.removeActiveAdmin(componentName);
}
}
/\*\*
\* 调用系统锁方法实现
\*/
private void sysLock(){
boolean active = dpm.isAdminActive(componentName);
if (active) {
dpm.lockNow();
}
}
}
接收类:
package com.xiaoma.www;
import android.app.admin.DeviceAdminReceiver;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;
public class AdminReceiver extends DeviceAdminReceiver {
@Override
public DevicePolicyManager getManager(Context context) {
Log.i("XiaoMaGuo", "调用了getManager()方法");
return super.getManager(context);
}
@Override
public ComponentName getWho(Context context) {
Log.i("XiaoMaGuo", "调用了getWho()方法");
return super.getWho(context);
}
/\*\*
\* 禁用
\*/
### 面试复习笔记
这份资料我从春招开始,就会将各博客、论坛。网站上等优质的Android开发中高级面试题收集起来,然后全网寻找最优的解答方案。每一道面试题都是百分百的大厂面经真题+最优解答。包知识脉络 + 诸多细节。
节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
**《960页Android开发笔记》**
![]()
**《1307页Android开发面试宝典》**
包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。
![]()
**《507页Android开发相关源码解析》**
只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。
真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。
![]()
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化学习资料的朋友,可以戳这里获取]()**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
开发相关源码解析》**
只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。
真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。
[外链图片转存中...(img-Sa3X6anj-1714403456847)]
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化学习资料的朋友,可以戳这里获取]()**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**