zoukankan      html  css  js  c++  java
  • 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.现在自己也可以做一键锁屏了.不用去网上找各种各样带广告带推送的了.
  • 相关阅读:
    Remove Nth Node From End of List从尾部开始删除第N个节点
    给乱序的链表排序 · Sort List, 链表重排reorder list LoLn...
    Partition List双色问题链表版
    翻转链表reverse linked list:全部,m~n
    删除链表中的重复元素:不留&留一个&删除一个
    基于快速排序的数组划分:2组 3组 K组(sort color)大小写排序 &#183; Partition Array
    字体 | font (Fonts) – CSS 中文开发手册
    HTML tfoot charoff 属性
    Bootstrap 网格系统
    struct (String) – Python 中文开发手册
  • 原文地址:https://www.cnblogs.com/lee0oo0/p/2817021.html
Copyright © 2011-2022 走看看