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.現在自己也可以做一鍵鎖屏了.不用去網上找各種各樣帶廣告帶推送的了.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM