`

调用系统的锁屏功能锁定屏幕

阅读更多
调用系统的锁屏Demo

程序运行后:
[img]

[/img]

点击激活设备管理权限按钮显示如下:
[img]

[/img]
点击Activate后,然后点击系统锁使用按钮,界面如下:
[img]

[/img]

工程结构图:
[img]

[/img]

AdminReceiver
package com.amaker.lock;

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);
	}
	
	/**
	 * 禁用
	 */
	@Override
	public void onDisabled(Context context, Intent intent) {
		Log.i("XiaoMaGuo", "调用了onDisabled()方法");
		Toast.makeText(context, "禁用设备管理", Toast.LENGTH_SHORT).show();
		
		super.onDisabled(context, intent);
	}
	@Override
	public CharSequence onDisableRequested(Context context, Intent intent) {
		Log.i("XiaoMaGuo", "调用了onDisableRequested()方法");
		return super.onDisableRequested(context, intent);
	}
	
	/**
	 * 激活
	 */
	@Override
	public void onEnabled(Context context, Intent intent) {
		Log.i("XiaoMaGuo", "调用了onEnabled()方法");
		Toast.makeText(context, "启动设备管理", Toast.LENGTH_SHORT).show();
		
		super.onEnabled(context, intent);
	}
	@Override
	public void onPasswordChanged(Context context, Intent intent) {
		Log.i("XiaoMaGuo", "调用了onPasswordChanged()方法");
		super.onPasswordChanged(context, intent);
	}
	@Override
	public void onPasswordFailed(Context context, Intent intent) {
		Log.i("XiaoMaGuo", "调用了onPasswordFailed()方法");
		super.onPasswordFailed(context, intent);
	}
	@Override
	public void onPasswordSucceeded(Context context, Intent intent) {
		Log.i("XiaoMaGuo", "调用了onPasswordSucceeded()方法");
		super.onPasswordSucceeded(context, intent);
	}
	@Override
	public void onReceive(Context context, Intent intent) {
		Log.i("XiaoMaGuo", "调用了onReceive()方法");
		super.onReceive(context, intent);
	}
	@Override
	public IBinder peekService(Context myContext, Intent service) {
		Log.i("XiaoMaGuo", "调用了peekService()方法");
		return super.peekService(myContext, service);
	}
	
}


DevicePolicyManagerDemoActivity
package com.amaker.lock;
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();
        }
	}
	
}


main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="激活设备管理权限" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="禁用设备管理权限" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="系统锁使用" />

</LinearLayout>


lockourscreen.xml
<?xml version="1.0" encoding="UTF-8"?>
<device-admin
  xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-policies>
    	<!-- 强行锁定 -->
        <force-lock />
        
        <!--  因为今天我们只讲下简单的,所以其它的权限,小马先暂时注释掉咯,有兴趣的朋友们可以打开自己试下-->
        	 <!-- 清除所有数据(恢复出厂设置)-->
        	 <wipe-data /> 
        	 <!-- 重置密码 -->
       		 <reset-password />
        	 <!-- 限制密码选择-->
        	 <limit-password /> 
        	 <!-- 监控登录尝试 -->
          	 <watch-login />
        
    </uses-policies>
</device-admin>


配置文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.amaker.lock"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk android:minSdkVersion="8" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name="com.amaker.lock.DevicePolicyManagerDemoActivity"
            android:label="欢迎跟小马一起交流学习" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        
        <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>
    </application>

</manifest>
  • 大小: 12.5 KB
  • 大小: 32.1 KB
  • 大小: 24 KB
  • 大小: 30.5 KB
分享到:
评论

相关推荐

    pandas-1.3.5-cp37-cp37m-macosx_10_9_x86_64.zip

    pandas whl安装包,对应各个python版本和系统(具体看资源名字),找准自己对应的下载即可! 下载后解压出来是已.whl为后缀的安装包,进入终端,直接pip install pandas-xxx.whl即可,非常方便。 再也不用担心pip联网下载网络超时,各种安装不成功的问题。

    基于java的大学生兼职信息系统答辩PPT.pptx

    基于java的大学生兼职信息系统答辩PPT.pptx

    基于java的乐校园二手书交易管理系统答辩PPT.pptx

    基于java的乐校园二手书交易管理系统答辩PPT.pptx

    tornado-6.4-cp38-abi3-musllinux_1_1_i686.whl

    tornado-6.4-cp38-abi3-musllinux_1_1_i686.whl

    Android Studio Ladybug(android-studio-2024.2.1.10-mac.zip.002)

    Android Studio Ladybug 2024.2.1(android-studio-2024.2.1.10-mac.dmg)适用于macOS Intel系统,文件使用360压缩软件分割成两个压缩包,必须一起下载使用: part1: https://download.csdn.net/download/weixin_43800734/89954174 part2: https://download.csdn.net/download/weixin_43800734/89954175

    基于ssm框架+mysql+jsp实现的监考安排与查询系统

    有学生和教师两种角色 登录和注册模块 考场信息模块 考试信息模块 点我收藏 功能 监考安排模块 考场类型模块 系统公告模块 个人中心模块: 1、修改个人信息,可以上传图片 2、我的收藏列表 账号管理模块 服务模块 eclipse或者idea 均可以运行 jdk1.8 apache-maven-3.6 mysql5.7及以上 tomcat 8.0及以上版本

    tornado-6.1b2-cp38-cp38-macosx_10_9_x86_64.whl

    tornado-6.1b2-cp38-cp38-macosx_10_9_x86_64.whl

    Android Studio Ladybug(android-studio-2024.2.1.10-mac.zip.001)

    Android Studio Ladybug 2024.2.1(android-studio-2024.2.1.10-mac.dmg)适用于macOS Intel系统,文件使用360压缩软件分割成两个压缩包,必须一起下载使用: part1: https://download.csdn.net/download/weixin_43800734/89954174 part2: https://download.csdn.net/download/weixin_43800734/89954175

    基于MATLAB车牌识别代码实现代码【含界面GUI】.zip

    matlab

    基于java的毕业生就业信息管理系统答辩PPT.pptx

    基于java的毕业生就业信息管理系统答辩PPT.pptx

    基于Web的毕业设计选题系统的设计与实现(springboot+vue+mysql+说明文档).zip

    随着高等教育的普及和毕业设计的日益重要,为了方便教师、学生和管理员进行毕业设计的选题和管理,我们开发了这款基于Web的毕业设计选题系统。 该系统主要包括教师管理、院系管理、学生管理等多个模块。在教师管理模块中,管理员可以新增、删除教师信息,并查看教师的详细资料,方便进行教师资源的分配和管理。院系管理模块则允许管理员对各个院系的信息进行管理和维护,确保信息的准确性和完整性。 学生管理模块是系统的核心之一,它提供了学生选题、任务书管理、开题报告管理、开题成绩管理等功能。学生可以在此模块中进行毕业设计的选题,并上传任务书和开题报告,管理员和教师则可以对学生的报告进行审阅和评分。 此外,系统还具备课题分类管理和课题信息管理功能,方便对毕业设计课题进行分类和归档,提高管理效率。在线留言功能则为学生、教师和管理员提供了一个交流互动的平台,可以就毕业设计相关问题进行讨论和解答。 整个系统设计简洁明了,操作便捷,大大提高了毕业设计的选题和管理效率,为高等教育的发展做出了积极贡献。

    机器学习(预测模型):2000年至2015年期间193个国家的预期寿命和相关健康因素的数据

    这个数据集来自世界卫生组织(WHO),包含了2000年至2015年期间193个国家的预期寿命和相关健康因素的数据。它提供了一个全面的视角,用于分析影响全球人口预期寿命的多种因素。数据集涵盖了从婴儿死亡率、GDP、BMI到免疫接种覆盖率等多个维度,为研究者提供了丰富的信息来探索和预测预期寿命。 该数据集的特点在于其跨国家的比较性,使得研究者能够识别出不同国家之间预期寿命的差异,并分析这些差异背后的原因。数据集包含22个特征列和2938行数据,涉及的变量被分为几个大类:免疫相关因素、死亡因素、经济因素和社会因素。这些数据不仅有助于了解全球健康趋势,还可以辅助制定公共卫生政策和社会福利计划。 数据集的处理包括对缺失值的处理、数据类型转换以及去重等步骤,以确保数据的准确性和可靠性。研究者可以使用这个数据集来探索如教育、健康习惯、生活方式等因素如何影响人们的寿命,以及不同国家的经济发展水平如何与预期寿命相关联。此外,数据集还可以用于预测模型的构建,通过回归分析等统计方法来预测预期寿命。 总的来说,这个数据集是研究全球健康和预期寿命变化的宝贵资源,它不仅提供了历史数据,还为未来的研究和政策制

    基于微信小程序的高校毕业论文管理系统小程序答辩PPT.pptx

    基于微信小程序的高校毕业论文管理系统小程序答辩PPT.pptx

    基于java的超市 Pos 收银管理系统答辩PPT.pptx

    基于java的超市 Pos 收银管理系统答辩PPT.pptx

    基于java的网上报名系统答辩PPT.pptx

    基于java的网上报名系统答辩PPT.pptx

    基于java的网上书城答辩PPT.pptx

    基于java的网上书城答辩PPT.pptx

    婚恋网站 SSM毕业设计 附带论文.zip

    婚恋网站 SSM毕业设计 附带论文 启动教程:https://www.bilibili.com/video/BV1GK1iYyE2B

    基于java的戒烟网站答辩PPT.pptx

    基于java的戒烟网站答辩PPT.pptx

    基于微信小程序的“健康早知道”微信小程序答辩PPT.pptx

    基于微信小程序的“健康早知道”微信小程序答辩PPT.pptx

    机器学习(预测模型):自行车共享使用情况的数据集

    Capital Bikeshare 数据集是一个包含从2020年5月到2024年8月的自行车共享使用情况的数据集。这个数据集记录了华盛顿特区Capital Bikeshare项目中自行车的租赁模式,包括了骑行的持续时间、开始和结束日期时间、起始和结束站点、使用的自行车编号、用户类型(注册会员或临时用户)等信息。这些数据可以帮助分析和预测自行车共享系统的需求模式,以及了解用户行为和偏好。 数据集的特点包括: 时间范围:覆盖了四年多的时间,提供了长期的数据观察。 细节丰富:包含了每次骑行的详细信息,如日期、时间、天气条件、季节等,有助于深入分析。 用户分类:数据中区分了注册用户和临时用户,可以分析不同用户群体的使用习惯。 天气和季节因素:包含了天气情况和季节信息,可以研究这些因素对骑行需求的影响。 通过分析这个数据集,可以得出关于自行车共享使用模式的多种见解,比如一天中不同时间段的使用高峰、不同天气条件下的使用差异、季节性变化对骑行需求的影响等。这些信息对于城市规划者、交通管理者以及自行车共享服务提供商来说都是非常宝贵的,可以帮助他们优化服务、提高效率和满足用户需求。同时,这个数据集也

Global site tag (gtag.js) - Google Analytics