设备管理器Demo

前言:
安卓系统设备管理器是由谷歌,通过以下方式帮助 Android 业主提供优越的特点:

  • 追查你的 Android 设备的位置与谷歌帐户用于管理您的设备。
  • 响你的 Android 手机,无论其位置如何。
  • 重置锁定屏幕密码。
  • 消灭你的 Android 手机上的所有数据

设备管理器创建还是比较繁琐的接下来我们就看着api来创建一个简单功能的案例。

首先进入官方文档看文档给出的Demo及其说明:
Creating the manifest
To use the Device Administration API, the application's manifest must include the following:
A subclass of DeviceAdminReceiver
that includes the following:The BIND_DEVICE_ADMIN
permission.
The ability to respond to the ACTION_DEVICE_ADMIN_ENABLED
intent, expressed in the manifest as an intent filter.

A declaration of security policies used in metadata.

Here is an excerpt from the Device Administration sample manifest:

            android:label="@string/activity_sample_device_admin">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.SAMPLE_CODE" />
    </intent-filter>
</activity>
<receiver android:name=".app.DeviceAdminSample$DeviceAdminSampleReceiver"
        android:label="@string/sample_device_admin"
        android:description="@string/sample_device_admin_description"
        android:permission="android.permission.BIND_DEVICE_ADMIN">
    <meta-data android:name="android.app.device_admin"
            android:resource="@xml/device_admin_sample" />
    <intent-filter>
        <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
    </intent-filter>
</receiver>

由于activity界面系统已将帮我们弄好了所以在此处我们只需注册广播就行。
步骤1: 找到官方文档 吧上面的receiver复制粘贴到清单文件(复制到清单文件你会发现好多错误不要怕下面一点一点处理)
步骤2 :receiver 节点name处往下看文档你会发现需要个DeviceAdminReceiver,故像以前建立广播接收器一样创建个类继承DeviceAdminReceiver然后在name处注册。
步骤 3: 往下处理,看到@string你会发现这需要字符串 故你自己可以写几个字符串。
步骤 4 :"@xml/device_admin_sample的处理,我们按照他的要求创建xml文件夹 再创建xml文件,文档给出了以下demo:

<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
  <uses-policies>
    <limit-password />
    <watch-login />
    <reset-password />
    <force-lock />
    <wipe-data />
    <expire-password />
    <encrypted-storage />
    <disable-camera />
  </uses-policies>
</device-admin>

把此内容贴到你的xml文件即可。

这样任务就基本完成了 接下来你可以写个简单布局按钮(我的demo):

image.png

步骤 5:一键开启功能 接着往下看文档你会发现:

image.png

此处文档给出了开启方法还是老样子帖走到你的开启按钮中
此处的错误处理,下面的字符串简单你自己随便写个就是但是mDeviceAdminSample你会发现此处需要个ComponentName对象
参数 上下文 ,类(广播接收者)所对应的字节码文件,此处不需要返回结果故直接开启(startActivity)活动。我的demo贴图如下

image.png

步骤:6 锁屏功能
文档给出了两种创建方法你会发现第二种简单些

image.png

用此例子比较简单(学会分析代码DevicePolicyManager是由系统服务获得,mDPM为成员变量

mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
  // 如果设备管理器未激活,点击开启锁屏就会崩 可以先判断
                // 组件对象可以作为是否激活的判断标识
                if (mDPM.isAdminActive(mDeviceAdminSample)){
                    mDPM.lockNow();
                    // 锁屏 同时去设密码
                    mDPM.resetPassword("1996",0);
                }else{
                    Toast.makeText(MainActivity.this, "请前往:设置 安全 设备管理器 点击激活", Toast.LENGTH_LONG).show();
                }

注:开启激活设备管理器后不关闭应用是卸不掉的哦
附录(我的代码)

清单文件:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.administrator.deviceani">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name=".DeviceAdmin"
            android:label="@string/sample_device_admin"
            android:description="@string/sample_device_admin_description"
            android:permission="android.permission.BIND_DEVICE_ADMIN">
            <meta-data android:name="android.app.device_admin"
                android:resource="@xml/device_admin_sample" />
            <intent-filter>
                <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
            </intent-filter>
        </receiver>
    </application>

</manifest>

java代码

package com.example.administrator.deviceani;

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

public class MainActivity extends AppCompatActivity {

    private ComponentName mDeviceAdminSample;
    private DevicePolicyManager mDPM;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button tvLock = (Button) findViewById(R.id.tv_lock);
        Button tvRemove = (Button) findViewById(R.id.tv_remove);
        Button tvUninstall = (Button) findViewById(R.id.tv_uninstall);
        Button tvStart = (Button) findViewById(R.id.tv_start);
          // 参数 上下文 ,类(广播接收者)所对应的字节码文件
        mDeviceAdminSample = new ComponentName(this,DeviceAdmin.class);

        mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);

        //一键开启按钮
        tvStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
                intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample);
                intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
                        "设备管理器");
                startActivity(intent);
                if (mDPM.isAdminActive(mDeviceAdminSample)){
                    Toast.makeText(MainActivity.this, "亲您已经开启", Toast.LENGTH_SHORT).show();
                }
            }
        });
        //一键锁屏按钮
        tvLock.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //锁屏功能  查看文档  下面set device lock 中有 (代码案例)
               // DevicePolicyManager mDPM;
                //mDPM.lockNow();
                //用此例子比较简单(学会分析代码DevicePolicyManager是由系统服务获得,mDPM为成员变量)

                // 如果设备管理器未激活,点击开启锁屏就会崩 可以先判断
                // 组件对象可以作为是否激活的判断标识
                if (mDPM.isAdminActive(mDeviceAdminSample)){
                    mDPM.lockNow();
                    // 锁屏 同时去设密码
                    mDPM.resetPassword("1996",0);
                }else{
                    Toast.makeText(MainActivity.this, "请前往:设置 安全 设备管理器 点击激活", Toast.LENGTH_LONG).show();
                }

            }
        });

    }
}

布局比较简单就不在给了。

小结:
经过上面的一番步骤就实现 开启 锁屏两个功能以下的功能看着文档相信你们也是可以简单的创建的。作为初学者的我最近在做一个项目的时候发现这个功能在手机防盗上用途很多。由于这个步骤比较繁琐就在此记下一笔,当然也方便自己以后查看哈。
希望对需要的有所帮助,如有不足欢迎指点嘿嘿!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,165评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,503评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,295评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,589评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,439评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,342评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,749评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,397评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,700评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,740评论 2 313
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,523评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,364评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,755评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,024评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,297评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,721评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,918评论 2 336

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,140评论 25 707
  • 一、权限清单: res/xml/devices_admin.xml 二、建立和注册设备管理器的Receiver 三...
    kdroid阅读 2,625评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,517评论 18 139
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,952评论 4 60
  • H小姐昨夜发来信息:“要不是因为你明天还要上班,我现在一定把你闹翻。我突然发觉自己用四年的时间当了个逗逼,大逗...
    贝壳里的砂砾阅读 389评论 2 3