Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android : DevicePolicyManager

Android : DevicePolicyManager

編輯:關於Android編程

介紹

Android 2.2(API 8)開始提供了一個可管理和操作設備的類DevicePolicyManager,通過這個類可以進行鎖屏、設置密碼、清除密碼、恢復出廠設置等操作。具體功能有:

恢復出廠設置 更改屏幕解鎖密碼 設置密碼規則 監視屏幕解鎖嘗試次數 鎖定屏幕 設置設備全局代理 設置鎖定屏幕密碼的有效期 設置存儲設備加密 停用相機 鎖屏時禁用某些功能

使用方法

定義Receiver,繼承DeviceAdminReceiver 添加xml,定義需要的管理權限清單 在AndroidManifest.xml中注冊receiver 使用DeviceAdminReceiver操作設備

代碼詳解

示例效果

MyDeviceAdminReceiver.java<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwcmUgY2xhc3M9"brush:java;"> import android.app.admin.DeviceAdminReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class MyDeviceAdminReceiver extends DeviceAdminReceiver { @Override public void onEnabled(Context context, Intent intent) { super.onEnabled(context, intent); Toast.makeText(context, "設備管理器:已激活", Toast.LENGTH_SHORT).show(); } @Override public void onDisabled(Context context, Intent intent) { super.onDisabled(context, intent); Toast.makeText(context, "設備管理器:未激活", Toast.LENGTH_SHORT).show(); } @Override public CharSequence onDisableRequested(Context context, Intent intent) { return "這是一個可選的消息,警告有關禁止用戶的請求"; } @Override public void onPasswordChanged(Context context, Intent intent) { super.onPasswordChanged(context, intent); Toast.makeText(context, "設備管理;密碼已經改變", Toast.LENGTH_SHORT).show(); } @Override public void onPasswordFailed(Context context, Intent intent) { super.onPasswordFailed(context, intent); Toast.makeText(context, "設備管理;改變密碼失敗", Toast.LENGTH_SHORT).show(); } @Override public void onPasswordSucceeded(Context context, Intent intent) { super.onPasswordSucceeded(context, intent); Toast.makeText(context, "設備管理;改變密碼成功", Toast.LENGTH_SHORT).show(); } }

my_device_admin.xml




    
          
          
          
          
          
         
         
          
         
         
    

AndroidManifest.xml




    
        
            
                

                
            
        

        
            
            
                
            
        
    


android:name=”.MyDeviceAdminReceiver” 自定義Receiver android:label=”@string/app_lable” 對應設備管理器中的名稱 android:description=”@string/app_description” 對應設備管理器中的描述 android:resource=”@xml/my_device_admin” 自定義權限清單

設備管理器

activity_main.xml


MainActivity.java

import android.app.Activity;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.IBinder;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class MainActivity extends AppCompatActivity {

    /**
     * 激活組件的請求碼
     */
    private static final int REQUEST_CODE_ACTIVE_COMPONENT = 1;

    /**
     * 設備安全管理服務,2.2之前需要通過反射技術獲取
     */
    private DevicePolicyManager devicePolicyManager = null;
    /**
     * 對應自定義DeviceAdminReceiver的組件
     */
    private ComponentName componentName = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        devicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
        componentName = new ComponentName(this, MyDeviceAdminReceiver.class);

        /**
         * 激活設備管理器
         */
        findViewById(R.id.btn_active).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (isAdminActive()) {
                    Toast.makeText(MainActivity.this, "設備管理器已激活", Toast.LENGTH_SHORT).show();
                } else {
                    // 打備管理器的激活窗口
                    Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
                    // 指定需要激活的組件
                    intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);
                    intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "(激活窗口中的描述信息)");
                    startActivityForResult(intent, REQUEST_CODE_ACTIVE_COMPONENT);
                }
            }
        });

        /**
         * 取消激活設備管理器
         */
        findViewById(R.id.btn_cancel_active).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (isAdminActive()) {
                    devicePolicyManager.removeActiveAdmin(componentName);
                    Toast.makeText(MainActivity.this, "將觸發DeviceAdminReceiver.onDisabled", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(MainActivity.this, "設備管理器未激活", Toast.LENGTH_SHORT).show();
                }
            }
        });

        /**
         * 修改鎖屏密碼
         */
        findViewById(R.id.btn_change_password).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (isAdminActive()) {
                    devicePolicyManager.resetPassword("1234", 0);
                    Toast.makeText(MainActivity.this, "若發生改變,則將觸發DeviceAdminReceiver.onPasswordChanged", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(MainActivity.this, "設備管理器未激活", Toast.LENGTH_SHORT).show();
                }
            }
        });

        /**
         * 取消鎖屏密碼
         */
        findViewById(R.id.btn_cancel_password).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (isAdminActive()) {
                    devicePolicyManager.resetPassword("", 0);
                    Toast.makeText(MainActivity.this, "若發生改變,則將觸發DeviceAdminReceiver.onPasswordChanged", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(MainActivity.this, "設備管理器未激活", Toast.LENGTH_SHORT).show();
                }
            }
        });

        /**
         * 鎖屏
         */
        findViewById(R.id.btn_lock).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (isAdminActive()) {
                    devicePolicyManager.lockNow();
                } else {
                    Toast.makeText(MainActivity.this, "設備管理器未激活", Toast.LENGTH_SHORT).show();
                }
            }
        });

        /**
         * 設置鎖屏時間
         */
        findViewById(R.id.btn_lock_time).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (isAdminActive()) {
                    devicePolicyManager.setMaximumTimeToLock(componentName, 5000);
                    Toast.makeText(MainActivity.this, "鎖屏設置將不可用", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(MainActivity.this, "設備管理器未激活", Toast.LENGTH_SHORT).show();
                }
            }
        });

        /**
         * 取消鎖屏時間
         */
        findViewById(R.id.btn_cancel_lock_time).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (isAdminActive()) {
                    devicePolicyManager.setMaximumTimeToLock(componentName, Long.MAX_VALUE);
                    Toast.makeText(MainActivity.this, "鎖屏設置恢復可用", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(MainActivity.this, "設備管理器未激活", Toast.LENGTH_SHORT).show();
                }
            }
        });

        /**
         * 恢復出廠設置
         */
        findViewById(R.id.btn_wipe_data).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (isAdminActive()) {
                    // 模擬器上無效,真機上慎用
//            devicePolicyManager.wipeData(0);
                    Toast.makeText(MainActivity.this, "源碼已屏蔽,慎用", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(MainActivity.this, "設備管理器未激活", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

    /**
     * 判斷該組件是否有系統管理員的權限(【系統設置-安全-設備管理器】中是否激活)
     * @return
     */
    private boolean isAdminActive() {
        return devicePolicyManager.isAdminActive(componentName);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == REQUEST_CODE_ACTIVE_COMPONENT) {
            // 激活組件的響應
            if (resultCode == Activity.RESULT_CANCELED) {
                Toast.makeText(this, "用戶手動取消激活", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(this, "已觸發DeviceAdminReceiver.onEnabled", Toast.LENGTH_SHORT).show();
            }
        }
    }
}
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved