`

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

阅读更多
调用系统的锁屏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
分享到:
评论

相关推荐

    Android调用隐藏系统服务锁屏

    在Android中,锁屏功能是由系统的`KeyguardService`提供的,它是系统服务的一部分,负责管理屏幕锁定和解锁的行为。 1. **系统服务与Binder通信**: Android系统服务是运行在系统进程中的组件,它们通过 Binder ...

    java实现软件锁屏功能

    这可能需要对事件监听器进行编程,确保在正确的时间调用锁屏方法。 总的来说,实现Java软件锁屏功能需要对操作系统API有一定了解,并且能够通过JNI或第三方库进行调用。在实际开发中,还需要考虑跨平台兼容性和安全...

    js 锁屏功能示例(比较齐全)

    9. **模块化与封装**:为了代码的可维护性和复用性,可以将锁屏功能封装成一个独立的模块或插件,提供易于调用的接口,如`lockScreen()`和`unlockScreen()`。 10. **安全性**:锁屏功能在处理敏感信息时尤其重要,...

    阻止屏幕锁屏2

    在IT领域,有时我们需要防止设备自动锁定屏幕,特别是在进行演示、连续播放视频或者进行需要长时间无间断操作的场景。"阻止屏幕锁屏2"这个主题涉及到的技术点主要是操作系统级别的电源管理和用户界面交互。 首先,...

    C#锁屏功能实现.zip

    在C#编程中,实现锁屏功能涉及到对操作系统API的调用和Windows Forms的应用程序设计。这个"C#锁屏功能实现"项目包含了多个文件,它们共同构成了一个简单的C#应用程序,用于实现系统的锁屏功能。下面我们将逐一分析...

    C#实现锁定屏幕效果

    接下来,你可以使用这个静态方法在需要的地方调用锁屏功能,如下所示: ```csharp public void LockScreen() { if (LockScreenHelper.LockWorkStation()) { Console.WriteLine("屏幕已锁定"); } else { ...

    Android应用源码之一键锁屏功能源码.zip

    一键锁屏应用允许用户快速便捷地锁定屏幕,而不必按住电源键或者滑动屏幕。本篇将深入探讨这个“一键锁屏功能”的源码,解析其背后的实现原理和关键代码。 首先,我们要理解Android系统的锁屏机制。在Android系统中...

    易语言屏幕锁屏工具源码.zip

    6. **系统交互**:锁屏工具需要有能力控制系统的显示状态,例如调用API函数来隐藏桌面、禁用鼠标和键盘等。 7. **进程管理**:为了防止用户强制关闭或结束锁屏程序,开发者可能需要监控和保护自己的进程,防止被...

    xp、7、10锁屏功能

    在Windows操作系统中,锁屏功能是一项重要的安全特性,它允许用户快速锁定计算机,防止未经授权的访问。本程序基于.NET Framework 2.0开发,这意味着它利用了微软在2005年发布的这个早期版本的.NET框架,以实现跨多...

    一键锁屏功能源码.rar

    2. **系统权限**:在某些系统中,锁定屏幕可能需要获取相应的权限,如Android系统的`SYSTEM_ALERT_WINDOW`或`USAGE_STATS`权限。 3. **API调用**:在不同平台上,锁屏功能的实现可能依赖于特定的API,例如在Android...

    锁定屏幕代码

    锁定屏幕的功能通常是通过调用Windows API(应用程序接口)来实现的。Windows API提供了丰富的函数和结构,允许开发者与操作系统进行交互,包括控制用户的会话和安全性。以下是一些关键的API知识点: 1. **LogonUI*...

    c#调用api实现屏蔽alt+ctrl+del及锁屏功能

    对于锁屏功能,Windows提供了`SystemParametersInfo` API函数,允许我们获取或设置系统参数,包括屏幕保护程序的设置。但是,阻止系统锁屏同样需要谨慎处理,因为这可能违反用户的期望和系统的安全策略。 总的来说...

    windows xp快速锁定屏幕可执行程序+源码

    标题 "windows xp快速锁定屏幕可执行程序+源码" 提示我们关注的是一个专为Windows XP设计的程序,它的功能是快速锁定计算机屏幕。在Windows XP操作系统中,用户可能需要迅速离开电脑但又不希望他人随意访问其桌面,...

    Android应用源码之一键锁屏功能源码.rar

    通过分析这个源码,开发者可以了解到如何在Android平台上实现一键锁屏功能,包括BroadcastReceiver的使用、权限管理、系统API的调用,以及UI设计和性能优化等多方面的知识。这不仅有助于理解Android系统的运作机制,...

    vfp 屏幕锁屏

    然而,在特定的开发环境中,如VFP,可能需要自定义的解决方案,尤其是当需要在程序运行时自动或临时锁定屏幕时。这里提到的“使用虚拟桌面来解决”是一种巧妙的方法,它利用了操作系统提供的多桌面功能来模拟屏幕...

    C# 屏幕锁屏 Lock screen

    如果超过30秒,调用锁屏函数。为了记录用户的最后一次活动,可以使用全局变量存储上一次鼠标或键盘事件的时间戳。 4. **锁屏界面与密码验证**: 锁屏界面一般会显示一个密码输入框和解锁按钮。使用`Windows Forms`...

    安卓Android源码——一键锁屏功能源码.zip

    在安卓(Android)系统中,实现一键锁屏功能是一个常见的需求,这可以帮助用户快速锁定设备,保护隐私并节省电量。本资源"安卓Android源码——一键锁屏功能源码.zip"提供了一个关于如何在Android应用中实现这一功能...

    Android一键锁屏功能的实现源码(含apk)

    通过`PowerManager`的`newWakeLock()`方法获取一个`WakeLock`对象,然后调用其`acquire()`方法来保持屏幕亮着并锁定。接着,调用`KeyguardManager`的`requestLock()`方法来激活锁屏。 5. **处理用户交互**:创建一...

    .net实现网吧锁屏源码--屏蔽系统热键

    标题中的".net实现网吧锁屏源码--屏蔽系统热键"指的是使用.NET框架开发的一款特殊软件,该软件的主要功能是在网吧环境下锁定计算机屏幕,并阻止用户通过系统热键(如Alt+Tab、Ctrl+Esc等)切换窗口或退出锁定状态。...

Global site tag (gtag.js) - Google Analytics