android一键锁屏代码

要用到下面两个类:

DeviceAdminReceiver 设备管理组件。这个类提供了一个方便解释由系统发出的意图的动作。你的设备管理应用程序必须包含一个DeviceAdminReceiver的子类。本程序中,就代表一个手机上的设备管理器.
DevicePolicyManager 一个管理设备上规范的类。 大多数客户端必须声明一个用户当前已经启用的DeviceAdminReceiver。 这个DevicePolicyManager为一个或者多个DeviceAdminReceiver实例管理这些规范。
 
DevicePolicyManager 的实例有个方法叫lockNow可以直接锁定屏幕.但是在这之前,需要激活程序中的设备管理器.
下面是主类LockActivity
  1. package com.iceman.test; 
  2.    
  3. import android.app.Activity; 
  4. import android.app.admin.DevicePolicyManager; 
  5. import android.content.ComponentName; 
  6. import android.content.Context; 
  7. import android.content.Intent; 
  8. import android.os.Bundle; 
  9.    
  10. public class LockActivity extends Activity { 
  11.    
  12.     private DevicePolicyManager policyManager; 
  13.    
  14.     private ComponentName componentName; 
  15.    
  16.     @Override 
  17.     public void onCreate(Bundle savedInstanceState) { 
  18.    
  19.         super.onCreate(savedInstanceState); 
  20.    
  21.         setContentView(R.layout.main);    
  22.     } 
  23.    
  24.   public void LockScreen(View v){
            policyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
            componentName = new ComponentName(this, LockReceiver.class);
            if (policyManager.isAdminActive(componentName)) {//判断是否有权限(激活了设备管理器)
                policyManager.lockNow();// 直接锁屏
                android.os.Process.killProcess(android.os.Process.myPid());
            }else{
                activeManager();//激活设备管理器获取权限
            }     
        }
  25.    
      // 解除绑定
        public void Bind(View v){
         if(componentName!=null){
            policyManager.removeActiveAdmin(componentName);
            activeManager();
         }
        }
  26.     @Override 
  27.     protected void onResume() {//重写此方法用来在第一次激活设备管理器之后锁定屏幕 
  28.         if (policyManager!=null && policyManager.isAdminActive(componentName)) {
                policyManager.lockNow();
                android.os.Process.killProcess(android.os.Process.myPid());
            }
     
  29.         super.onResume(); 
  30.     } 
  31.    
  32.     private void activeManager() { 
  33.         //使用隐式意图调用系统方法来激活指定的设备管理器 
  34.         Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); 
  35.         intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName); 
  36.         intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "一键锁屏"); 
  37.         startActivity(intent); 
  38.     } 
  39.    

下面是设备管理器类LockReceiver,这是一个继承自DeviceAdminReceiver的类,可以接收到激活/接触激活的广播,进行下一步操作,本程序中,只是简单打印一下信息.

  1. import android.app.admin.DeviceAdminReceiver; 
  2. import android.content.Context; 
  3. import android.content.Intent; 
  4.    
  5. public class LockReceiver extends DeviceAdminReceiver{ 
  6.    
  7.    
  8.     @Override 
  9.     public void onReceive(Context context, Intent intent) { 
  10.         super.onReceive(context, intent); 
  11.         System.out.println("onreceiver"); 
  12.     } 
  13.    
  14.     @Override 
  15.     public void onEnabled(Context context, Intent intent) { 
  16.         System.out.println("激活使用"); 
  17.         super.onEnabled(context, intent); 
  18.     } 
  19.    
  20.     @Override 
  21.     public void onDisabled(Context context, Intent intent) { 
  22.         System.out.println("取消激活"); 
  23.         super.onDisabled(context, intent); 
  24.     } 
  25.    
  26.    

主配置文件:

 

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     package="com.iceman.test" 
  4.     android:versionCode="1" 
  5.     android:versionName="1.0" > 
  6.    
  7.     <uses-sdk android:minSdkVersion="9" /> 
  8.    
  9.     <application 
  10.         android:icon="@drawable/ic_launcher" 
  11.         android:label="@string/app_name" > 
  12.         <activity 
  13.             android:name=".LockActivity" 
  14.             android:label="@string/app_name" 
  15.             android:theme="@android:style/Theme.Translucent" > 
  16.             <intent-filter> 
  17.                 <action android:name="android.intent.action.MAIN" /> 
  18.    
  19.                 <category android:name="android.intent.category.LAUNCHER" /> 
  20.             </intent-filter> 
  21.         </activity> 
  22.    
  23.         <receiver 
  24.             android:name=".LockReceiver" 
  25.             android:description="@string/app_name" 
  26.             android:label="@string/app_name" 
  27.             android:permission="android.permission.BIND_DEVICE_ADMIN" > 
  28.             <meta-data 
  29.                 android:name="android.app.device_admin" 
  30.                 android:resource="@xml/lock_screen" /> 
  31.    
  32.             <intent-filter> 
  33.                 <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> 
  34.             </intent-filter> 
  35.         </receiver> 
  36.     </application> 
  37.    
  38. </manifest> 

其中lock_screen是设备管理器的权限声明,需要在res/xml目录下以xml文件形式定义

 

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <device-admin xmlns:android="http://schemas.android.com/apk/res/android" > 
  3.     <uses-policies> 
  4.         <!-- 锁定屏幕 --> 
  5.         <force-lock /> 
  6.     </uses-policies> 
  7. </device-admin> 

 

OK.现在自己也可以做一键锁屏了.不用去网上找各种各样带广告带推送的了.
posted on 2012-12-13 20:46  lee0oo0  阅读(13577)  评论(3编辑  收藏  举报