Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android Device Administration 設備管理器——實現一鍵鎖屏

Android Device Administration 設備管理器——實現一鍵鎖屏

編輯:關於Android編程

最近研究了一下安全這一塊的內容,當然,我是比較水的,所以也拿不出什麼好知識點,但是有一些冷門的東西我還是可以聊聊的,就拿這個鎖屏來說吧,我們現在市面上有一些一鍵鎖屏的軟件

我們可以看到,是數不勝數的,所以,其實他一開始使用的時候,都需要請求設備管理器

我們可以看到,只有當我們激活的時候,我們才可以使用它,那麼,他到底是什麼東西呢?其實,當我們激活之後,我們可以在我們手機的設置——安全——設備管理器裡面看到他的所有信息

我們帶著這個疑問,打開我們的android api指南看看

地址:http://www.android-doc.com/guide/topics/admin/device-admin.html

一.設備管理

Android 2.2引入了企業應用程序提供支持 Android設備管理API。 設備管理API提供了設備 系統級管理功能。 這些api允許您創建安全性敏感的應用程序用於企業設置,例如, 內置Android電子郵件應用程序利用了新的api來改善 交換的支持。 通過電子郵件應用程序中,管理員可以交換 執行密碼策略——包括字母數字密碼或數字 針,在設備管理員也可以遠程擦除(即 恢復工廠默認值丟失或被盜的手機。 用戶可以交換同步 他們的電子郵件和日歷數據。

二.設備管理API概述

下面的例子類型的應用程序,可以使用設備管理API:

電子郵件客戶端。 遠程擦除數據的安全應用程序 設備管理服務和應用程序。

三.它是如何工作的

你使用的設備管理API編寫設備管理應用程序的用戶 安裝在他們的設備上。 設備管理應用程序執行所需的政策。

系統管理員寫一個設備管理應用程序執行 遠程/本地設備安全策略。 這些政策可能是硬編碼的 應用程序或應用程序可以動態地從第三方獲取政策服務器。

應用程序安裝在用戶的設備上。 但是Android確實目前沒有一個自動配置解決方案。 系統管理員可能的一些方法分發應用程序用戶如下:

Google play 其他商店 其他方式,比如郵件或者網站

系統提示用戶啟用設備管理應用程序, 當發生這種情況取決於應用程序是如何實現的。

一旦用戶啟用設備管理應用程序,它們是其政策。遵守這些政策通常帶來好處,比如 對敏感系統和數據的訪問。

如果用戶不啟用設備管理應用程序,它仍然是在設備上,但是在一個不活躍的狀態。 用戶將不受其政策,他們將針對積極心態相反沒有得到任何應用程序的例子,他們可能無法同步數據。

如果用戶未能遵守政策(例如,如果一個用戶設置一個 密碼,違反了准則),它是由應用程序來決定 如何處理這個問題。 然而,這通常會導致用戶不 能同步數據。

如果一個設備試圖連接到服務器,需要政策 在設備管理API,支持連接不會 被允許。 設備管理API目前並不允許部分 供應。 換句話說,如果一個設備(例如,一個遺留設備) 不支持所有的既定政策,允許沒有辦法 設備連接。

如果一個設備包含多個管理員啟用應用程序,嚴格的政策 執行。 沒有辦法目標特定的管理 應用程序。

卸載現有設備管理應用程序中,用戶需要 先注銷程序作為管理員。

翻譯有點蹩腳哈,但是大概的意思就是你激活之後他就是一個政策,但是你不激活,也是可以的,只是出於靜止狀態,卸載這個應用之前你就需要先注銷設備管理權限

那我們應該怎麼做呢?他的政策比較多,我們大致的看一下

四.一鍵鎖屏

OK,我們說了這麼多概念,倒不如直接用代碼說明

接下來我們就跟隨者文檔來實現

其實官方文檔說的十分的詳細,首先我們要定義一個Receiver讓他繼承DeviceAdminReceiver,我們暫時不是實現它

package com.lgl.lockone;

import android.app.admin.DeviceAdminReceiver;

/**
 * 鎖屏
 * Created by LGL on 2016/7/24.
 */
public class LockReceiver extends DeviceAdminReceiver{

}

然後我們需要定義清單文件

 
            
            
                
            
        

這裡有必要要說一下了,首先是label,說標題,這個應該大家都知道,然後是description描述,當你激活設備的時候就會去請求,你就可以看到了,最後要綁定一個權限文件,我們在res下new一個xml文件夾,新建一個device_admin_sample



    
        
        
        
        
        
        
        
        
    

OK,這些做完了之後我們先去最簡單的實現一下鎖屏,需要用到DevicePolicyManager

package com.lgl.lockone;

import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    private Button btnLock;
    private DevicePolicyManager mDPM;

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


        //設備政策管理器
        mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);

        btnLock = (Button) findViewById(R.id.btnLock);
        btnLock.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //鎖屏
                mDPM.lockNow();
            }
        });
    }
}

其實這裡就一個按鈕,然後去lockNow請求鎖屏,但是你會發現,他報錯了,提示是沒有權限,這個權限可以不是用戶的權限,我們去設備管理器裡面看一下

 

這裡,就有我們的應用了,上面就是我們在清單裡面定義的標題和描述了,我們勾選上,再去實現鎖屏,你會發現就可以了,這就是需要我們手動去打開了,但是用戶大多數是不會知道這回事的,所以我們一啟動程序我們應該就去激活,文檔上其實也已經寫了,我們來看

ComponentName mDeviceAdminSample = new ComponentName(this, LockReceiver.class);

        Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
        intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample);
        intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
                "我是不是很帥");
        startActivity(intent);

然後我們再來看下效果

 

而且我們可以更改鎖屏密碼

 //重置密碼
 mDPM.resetPassword("12345678", 0);

如果傳空串那就說明不要密碼,我們可以再次運行一下

 

OK,我們來看下主頁的邏輯吧

package com.lgl.lockone;

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

public class MainActivity extends AppCompatActivity {

    private Button btnLock;
    private DevicePolicyManager mDPM;
    private ComponentName mDeviceAdminSample;

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

        mDeviceAdminSample = new ComponentName(this, LockReceiver.class);

        //設備政策管理器
        mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);

        btnLock = (Button) findViewById(R.id.btnLock);
        btnLock.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mDPM.isAdminActive(mDeviceAdminSample)) {
                    //鎖屏
                    mDPM.lockNow();
                    //重置密碼
                    mDPM.resetPassword("123456", 0);
                } else {
                    Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
                    intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample);
                    intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
                            "我是不是很帥");
                    startActivity(intent);
                }
            }
        });
    }
}

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved