[Android學習筆記七] 設備管理服務示例開發

   關於Android Device Administratioin介紹可參見文檔 docs/guide/topics/admin/device-admin.html 小節。html


   本文經過示例演示Android Device Policy管理的實現。java


   1.示例基本操做圖android

   

     wKiom1ZdXWuh3pLzAADs8ui0CK4903.png

     上圖是本示例的主界面,經過應用程序來實現設備管理,本示例實現密碼設置管理。git

     

     1.1 經過點擊「啓動設備管理器」按鈕來激活設備管理github

   

     wKiom1ZdXkOC_Tt0AAExp-CnAww052.png      

      應用程序用通知設備管理啓用,用戶點擊激活,應用程序具有設備管理能力。app


    1.2  經過點擊「設置密碼規則」按鈕來設置鎖屏密碼的限制規則,要使用該策略須要在設備管理的使用策略列表中添加limit-password.框架

   

     

     wKioL1ZdXzHDZTq0AAC_1sgm19Y095.pngwKiom1ZdXs3zEBoTAAEf044QB-4443.pngwKiom1ZdXtCQrB4dAAFF2tcY6NY804.png


     示例中調用了設置新密碼的ACTION(DevicePolicyManager.ACTION_SET_NEW_PASSWORD),經過設置後,看以看到屏幕鎖屏須要密碼。  ide

  

    1.3 經過點擊「修改密碼」按鈕則能夠將文本框中的內容做爲鎖屏密碼,該步驟能夠經過程序完成。佈局

   

    wKiom1ZdYALAigjDAAFtasmTyCs591.png


    調用DevicePolicyManager的重置密碼方法(resetPassword),便可在應用程序中對鎖屏密碼進行重置。ui


  2. 具體實現

  

     實現上述整個示例須要:

     a.界面佈局;實際應用中根據具體狀況而定

     b.DevicePolicyManager類的具體使用

     c.DeviceAdminReceiver類的子類話,來實現具體廣播事件的處理

     d.AndroidManifest.xml文件中廣播接收類的配置

     c.應用程序中須要的設備管理策略列表

   

     注:本示例代碼使用了Butterknife框架。


   2.1 示例程序界面(layout/activity_device_admin.xml)

     

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:background="#f7f1f1" android:orientation="vertical" android:padding="15dp">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal" android:orientation="horizontal">
        <EditText
            android:id="@+id/pwd_editText"
            android:layout_width="0dp"
            android:layout_height="wrap_content" android:layout_margin="10dp" android:layout_weight="3" android:hint="6位數字"
            android:textColor="@android:color/black"/>
        <Button
            android:id="@+id/modify_pwd_button"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="10dp" android:layout_weight="1.5" android:text="修改密碼"/>
    </LinearLayout>
    <Button
        android:id="@+id/pwd_rule_set_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="設置密碼規則"/>
    <Button
        android:id="@+id/device_admin_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="啓用設備管理"/>
</LinearLayout>

   

    2.2 Activity類和自定義的DeviceAdminReceiver類

package secondriver.sdk.activity;

import android.app.Activity;
import android.app.admin.DeviceAdminReceiver;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnClick;
import secondriver.sdk.R;

/**
 * Author : secondriver
 * Created : 2015/11/27
 */
public class DeviceAdminActivity extends Activity {

    @Bind(R.id.pwd_editText)
    public EditText pwdEditText;

    private DevicePolicyManager mDevicePolicyManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_device_admin);
        ButterKnife.bind(this);
        mDevicePolicyManager = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
    }

    //單擊啓用設備管理按鈕
    @OnClick(R.id.device_admin_button)
    public void onClickDeviceButton(Button button) {
        Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
        intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, new ComponentName(this, MyDeviceAdminReceiver.class));
        intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "啓動設備管理器");
        startActivityForResult(intent, 1);
    }

    //單擊設置密碼規則按鈕
    @OnClick(R.id.pwd_rule_set_button)
    public void onClickPwdRuleSetButton(Button button) {
        Intent intent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD);
        startActivityForResult(intent, 2);
    }

    //單擊修改密碼按鈕
    @OnClick(R.id.modify_pwd_button)
    public void onClickModifyPwdButton(Button button) {
        String pwd = pwdEditText.getText().toString();
        ComponentName receiver = new ComponentName(this, MyDeviceAdminReceiver.class);
        boolean active = mDevicePolicyManager.isAdminActive(receiver);
        if (active) {
            boolean rs = mDevicePolicyManager.resetPassword(pwd, DevicePolicyManager.RESET_PASSWORD_REQUIRE_ENTRY);
            if (rs) {
                Toast.makeText(this, "密碼修改爲功", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(this, "密碼修改失敗", Toast.LENGTH_SHORT).show();
            }
        } else {
            Toast.makeText(this, "沒有Active Admin", Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
            case 1:
                if (resultCode == RESULT_OK) {
                    Toast.makeText(this, "設備管理器開啓成功", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(this, "設備管理器開啓失敗", Toast.LENGTH_SHORT).show();
                }
                break;
            case 2:
                if (resultCode == RESULT_OK) {
                    Toast.makeText(this, "密碼規則設置成功", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(this, "密碼規則設置失敗", Toast.LENGTH_SHORT).show();
                }
                break;
            default:
                break;
        }
    }

    //自定義的設備管理廣播接收類,能夠重寫DeviceAdminReceiver中的方法,來實現具體功能
    public static class MyDeviceAdminReceiver extends DeviceAdminReceiver {

        /**
         * 重寫其中方法
         * <p>
         * More
         */

        @Override
        public void onDisabled(Context context, Intent intent) {
            super.onDisabled(context, intent);
            //設備管理禁用
        }

        @Override
        public void onEnabled(Context context, Intent intent) {
            super.onEnabled(context, intent);
            //設備管理啓用
        }
    }
}



   2.3 配置設備管理接收者

<activity android:name=".activity.DeviceAdminActivity"/>
        <receiver android:name=".activity.DeviceAdminActivity$MyDeviceAdminReceiver"
                  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"/>
            </intent-filter>
        </receiver>


    xml/device_admin內容:

<?xml version="1.0" encoding="utf-8"?>
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-policies>
        <!--設置密碼規則;控制屏幕鎖的密碼長度和容許的字符-->
        <limit-password/>
        <!--監視屏幕鎖解鎖嘗試的次數;若是輸入錯誤次數過多則鎖定手機或者清除全部數據-->
        <watch-login/>
        <!--重置屏幕鎖的密碼;從新設置新的屏幕鎖密碼-->
        <reset-password/>
        <!--強制鎖屏;控制屏幕鎖屏的方式和時間-->
        <force-lock/>
        <!--擦除數據;恢復出廠設置清除說有數據-->
        <wipe-data/>
        <!--禁用相機;禁止使用全部設備攝像頭-->
        <disable-camera/>
        <!--加密數據;對存儲的應用數據進行加密-->
        <encrypted-storage/>
        <!--密碼過時;強制用戶更改屏幕鎖密碼的頻率-->
        <expire-password/>
    </uses-policies>
</device-admin>



    示例生成apk,該應用具體了設備管理的功能。

相關文章
相關標籤/搜索