Android 設(shè)備管理器 理解和使用

DevicePolicyManager,設(shè)備策略管理器。顧名思義,DevicePolicyManager為Android系統(tǒng)的管理提供了一套策略,有三種方案

  • Device Administration, 設(shè)備管理員
  • Profile Owner, 配置文件所有者
  • Device Owner, 設(shè)備所有者

Device Admin

過用戶授權(quán)自己的應(yīng)用設(shè)備管理權(quán)限后,可以在代碼中修改一些系統(tǒng)設(shè)置,需要在應(yīng)用中配置一個xml,xml中聲明相應(yīng)的權(quán)限,這些權(quán)限基本代表了DeviceAdmin可以使用的能力

<?xml version="1.0" encoding="utf-8"?>
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
  <uses-policies>
    <!-- 密碼長度限制 -->
    <limit-password />
    <!-- 監(jiān)控屏幕解鎖嘗試次數(shù) -->
    <watch-login />
    <!-- 更改鎖屏密碼 -->
    <reset-password />
    <!-- 鎖屏(可實現(xiàn)一鍵鎖屏功能) -->
    <force-lock />
    <!-- 清除所有數(shù)據(jù) -->>
    <wipe-data />
    <!-- 設(shè)置鎖屏密碼的有效期 -->
    <expire-password />
    <!-- 設(shè)置存儲設(shè)備加密 -->
    <encrypted-storage />
    <!-- 禁用相機 -->
    <disable-camera />
  </uses-policies>
</device-admin>

ProfileOwner

ProfileOwner 譯為配置文件所有者,在Android5.0系統(tǒng)推出。ProfileOwner涵蓋了所有DeviceAdmin用戶的管理能力。Google為了細化行業(yè)領(lǐng)域的管理而推出了這一組API,也被稱為Android for work,旨在讓用戶在體驗上可以輕松的兼顧生活和工作,可以將你的個人信息和工作信息等進行分類,隨時查看

具體功能如下

  • 隱藏應(yīng)用,可停用制定應(yīng)用并且不再界面顯示,除非調(diào)用相應(yīng)API恢復(fù)可用,否則該應(yīng)用永遠無法運行??梢杂脕黹_發(fā)應(yīng)用黑白名單功能。

  • 禁止卸載應(yīng)用,被設(shè)置為禁止卸載的應(yīng)用將成為受保護應(yīng)用,無法被用戶卸載,除非取消保護。

  • 復(fù)用系統(tǒng)APP

  • 修改系統(tǒng)設(shè)置

  • 調(diào)節(jié)靜音

  • 修改用戶圖標

  • 修改權(quán)限申請的策略

  • 限制指定應(yīng)用的某些功能

  • 允許輔助服務(wù)

  • 允許輸入法服務(wù)

  • 禁止截圖

  • 禁止藍牙訪問聯(lián)系人

DeviceOwner

DeviceOwner, 設(shè)備所有者,Android5.0引入。同樣的,DeviceOwner涵蓋了所有DeviceAdmin用戶的管理能力,是一類特殊的設(shè)備管理員,具有在設(shè)備上創(chuàng)建和移除輔助用戶以及配置全局設(shè)置的額外能力。DeviceOwner完善了行業(yè)用戶的MDM(Mobile Device Manager)行業(yè)管理能力,主要能力如下:

  • 設(shè)置網(wǎng)絡(luò)時間同步, 設(shè)置后無法從Settings取消
  • 用戶管理, 創(chuàng)建用戶、刪除用戶等
  • 管理賬號系統(tǒng)
  • 清除鎖屏
  • 設(shè)置Http代理
  • 禁止狀態(tài)欄
  • 通知等待更新
  • 禁用相機
  • 隱藏應(yīng)用
  • 禁止卸載應(yīng)用
  • 復(fù)用系統(tǒng)APP
  • 獲取wifi地址
  • 重啟系統(tǒng)

Demo演示Device Admin

  • 激活設(shè)備管理器
  • 取消激活設(shè)備管理器
  • 設(shè)置解鎖方式 不需要激活就可以運行
  • 設(shè)置解鎖方式 需要激活設(shè)備管理器
  • 立即鎖屏
  • 設(shè)置5秒后鎖屏 充電狀態(tài)下不管用
  • 清除數(shù)據(jù) 恢復(fù)出廠設(shè)置
  • 修改鎖密碼(PIN)
  • 禁用相機

開啟設(shè)備管理器流程

  1. 編寫廣播接收器DeviceReceiver繼承DeviceAdminReceiver

    public class DeviceReceiver extends DeviceAdminReceiver {
        @Override
        public void onEnabled(Context context, Intent intent) {
            // 設(shè)備管理:可用
            Toast.makeText(context, "設(shè)備管理:可用", Toast.LENGTH_SHORT).show();
        }
    @Override
    public void onDisabled(final Context context, Intent intent) {
        // 設(shè)備管理:不可用
        Toast.makeText(context, "設(shè)備管理:不可用", Toast.LENGTH_SHORT).show();
    
     }
    }
    
  1. AndroidManifest注冊廣播接收器

         <!--設(shè)備管理 begin -->
            <receiver
                android:name=".DeviceReceiver"
                android:permission="android.permission.BIND_DEVICE_ADMIN">
                <meta-data
                    android:name="android.app.device_admin"
                    android:resource="@xml/device_admin" />
                <intent-filter>
                    <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
                    <action                      android:name="android.app.action.DEVICE_ADMIN_DISABLE_REQUESTED" />
                    <action android:name="android.app.action.DEVICE_ADMIN_DISABLED" />
    
                    <category android:name="android.intent.category.HOME" />
                </intent-filter>
            </receiver>
            <!--設(shè)備管理 end -->
    
  1. xml下添加文件device_admin.xml

    <?xml version="1.0" encoding="utf-8"?>
    <device-admin xmlns:android="http://schemas.android.com/apk/res/android">
        <uses-policies>
            <!-- 限制密碼類型 -->
            <limit-password />
            <!-- 監(jiān)控登錄嘗試 -->
            <watch-login />
            <!-- 重置密碼 -->
            <reset-password />
            <!--鎖屏 -->
            <force-lock />
            <!-- 恢復(fù)出廠設(shè)置 -->
            <wipe-data />
            <!--禁用相機-->
            <disable-camera />
            
            <disable-keyguard-features />
    
            <set-global-proxy />
    
            <!-- 設(shè)置鎖屏密碼的有效期 -->
            <expire-password />
    
        </uses-policies>
    </device-admin>
    
  1. 激活設(shè)備管理器

       // 激活設(shè)備管理器
        public void enableDeviceManager() {
            //判斷是否激活  如果沒有就啟動激活設(shè)備
            if (!devicePolicyManager.isAdminActive(componentName)) {
                Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
    
                intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);
                intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
                        mContext.getString(R.string.dm_extra_add_explanation));
                mContext.startActivity(intent);
            } else {
                Toast.makeText(mContext, "設(shè)備已經(jīng)激活,請勿重復(fù)激活", Toast.LENGTH_SHORT).show();
            }
        }
    
  1. 移除設(shè)備管理器

       // 取消激活設(shè)備管理器
        public void disableDeviceManager() {
            devicePolicyManager.removeActiveAdmin(componentName);
        }
    
    

詳細代碼

https://github.com/ddssingsong/DevicePolicyManager

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容