设备管理器进行锁屏和数据清除等功能

1.首先创建一个类DeviceAdminSample继承DeviceAdminReceiver(android.app.admin.DeviceAdminReceiver),作为接收广播信息的处理类(其实不用实现,主要内部也是维护了DevicePolicyManager类的实例,主要操作的功能是这个类的内部方法实现的)

package com.example.deviceadmi;

import android.app.admin.DeviceAdminReceiver;
import android.content.Context;
import android.content.Intent;

public class DeviceAdminSample extends DeviceAdminReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        super.onReceive(context, intent);
    }
}

2.在清单配置文件上配置receiver信息

<receiver
            android:name="com.example.deviceadmi.DeviceAdminSample"
            android:description="@string/sample_device_admin_description"
            android:label="@string/sample_device_admin"
            android:permission="android.permission.BIND_DEVICE_ADMIN" >
            <meta-data
                android:name="android.app.device_admin"
                android:resource="@layout/device_admin_sample" /><!--device_admin_sample的xml文件需要创建-->

            <intent-filter>
                <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
            </intent-filter>
        </receiver>

3.创建device_admin_sample.xml文件

<?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 />
    <expire-password />
    <encrypted-storage />
    <disable-camera />
  </uses-policies>
</device-admin>

4.在activity上直接创建调用就可以

package com.example.deviceadmi;

import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {

    private ComponentName mDeviceAdminSample;
    private DevicePolicyManager mDPM;

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

        Button btn_active=(Button) findViewById(R.id.btn_active);
        Button btn_lock=(Button) findViewById(R.id.btn_lock);
        Button btn_wipedata=(Button) findViewById(R.id.btn_wipedata);
        Button btn_unintall=(Button) findViewById(R.id.btn_unintall);

        mDeviceAdminSample = new ComponentName(this, DeviceAdminSample.class);
        mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);

        btn_active.setOnClickListener(new OnClickListener() {

            //调用设备管理器的页面显示,激活需要自己点击
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
                intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample);
                intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,"设备管理器");
                startActivity(intent);
            }
        });

        btn_lock.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if (mDPM.isAdminActive(mDeviceAdminSample)) {//判断定义好的组件是否开启激活了
                    mDPM.lockNow();
                    mDPM.resetPassword("123", 0);
                }else{
                    Toast.makeText(getApplicationContext(), "还没有激活设备管理器", Toast.LENGTH_LONG).show();
                }
            }
        });

        btn_wipedata.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO 模拟器是没有进行数据的清除的,真机才会清除数据
                if (mDPM.isAdminActive(mDeviceAdminSample)) {
                    mDPM.wipeData(0);//清除手机内部存储的数据
//                    mDPM.wipeData(DevicePolicyManager.WIPE_EXTERNAL_STORAGE);//清除手机外部存储的数据
                } else {
                    Toast.makeText(getApplicationContext(), "还没有激活设备管理器", Toast.LENGTH_LONG).show();
                }
            }
        });

        /**
         * 卸载页面的调用
         * <activity android:name=".UninstallerActivity"
                android:configChanges="orientation|keyboardHidden"
                android:theme="@style/TallTitleBarTheme">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <action android:name="android.intent.action.DELETE" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="package" />
            </intent-filter>
        </activity>
         */
        btn_unintall.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent("android.intent.action.DELETE");
                intent.addCategory("android.intent.category.DEFAULT");
                intent.setData(Uri.parse("package:"+getPackageName()));//卸载当前的应用
                startActivity(intent);
            }
        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

activity_main.xml布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.deviceadmi.MainActivity" >

    <Button
        android:id="@+id/btn_active"
        android:text="一键开启"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <Button
        android:id="@+id/btn_lock"
        android:text="一键锁屏"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <Button
        android:id="@+id/btn_wipedata"
        android:text="一键清除数据"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <Button
        android:id="@+id/btn_unintall"
        android:text="一键卸载"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>

运行结果:

      

参考 Device Administration

时间: 2024-12-28 01:19:23

设备管理器进行锁屏和数据清除等功能的相关文章

Android实例-手机安全卫士(三十一)-根据指令完成相应操作二(锁屏和数据清除)

一.目标 1.实现远程锁屏和数据销毁操作: 2.初步制作“一键锁屏”应用和优化. 二.代码实现 1.在Receiver包下新建一个类(取名LockScreenReceiver)继承DeviceAdminReceiver类(是BroadcastReceiver类的一个子类),并在清单配置文件配置receiver标签 (1)在receiver标签中,增加name.permission属性,name为新建类(LockScreenReceiver)的全路径名称,permission为必须的BIND_DE

Android Device Administration 设备管理器——一键锁屏的实现

Android Device Administration 设备管理器--锁屏的实现 最近研究了一下安全这一块的内容,当然,我是比较水的,所以也拿不出什么好知识点,但是有一些冷门的东西我还是可以聊聊的,就拿这个锁屏来说吧,我们现在市面上有一些一键锁屏的软件 我们可以看到,是数不胜数的,所以,其实他一开始使用的时候,都需要请求设备管理器 我们可以看到,只有当我们激活的时候,我们才可以使用它,那么,他到底是什么东西呢?其实,当我们激活之后,我们可以在我们手机的设置--安全--设备管理器里面看到他的所

【腾讯Bugly干货分享】浅谈Android自定义锁屏页的发车姿势

本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57875330c9da73584b025873 一.为什么需要自定义锁屏页 锁屏作为一种黑白屏时代就存在的手机功能,至今仍发挥着巨大作用,特别是触屏时代的到来,锁屏的功用被发挥到了极致.多少人曾经在无聊的时候每隔几分钟划开锁屏再关上,孜孜不倦,其酸爽程度不亚于捏气泡膜.确实,一款漂亮的锁屏能为手机增色不少,但锁屏存在的核心目的主要是三个:保护自己手机的隐私,防止误操作,在不关闭

浅谈 Android 自定义锁屏页的发车姿势

作者:blowUp,原文链接:http://mp.weixin.qq.com/s?__biz=MzA3NTYzODYzMg==&mid=2653577446&idx=2&sn=940cfe45f8da91277d1046d90368d440&scene=4#wechat_redirect 锁屏作为一种黑白屏时代就存在的手机功能,至今仍发挥着巨大作用,特别是触屏时代的到来,锁屏的功用被发挥到了极致.多少人曾经在无聊的时候每隔几分钟划开锁屏再关上,孜孜不倦,其酸爽程度不亚于捏气

Android wiki : 18.DevicePolicyManager锁屏和清除数据

DevicePolicyManager 类:设备策略管理器   安全设备 Android 2.2 SDK提供了一个可管理和操作设备的API叫DevicePolicyManager, 使用这个API你可以接管手机的应用权限,对手机做出很多大胆的操 作, 比如锁屏.恢复出厂设置.设置密码.强制清除密码,修改密码.设置屏幕灯光渐暗时间间隔等操作. 这个API让你的程序直接掌握了系统的命脉. 但是,同样的道理,别人也可以做类似的程序,各程序之间的权限是不起冲突的~ 首先,要想调用DevicePolicy

一键锁屏、一键删除、设备管理器

设备管理器的操作步骤 1.创建类DeviceAdminReceiver的子类 package com.itheima62.lockscreen; import android.app.admin.DeviceAdminReceiver; public class DeviceAdminSample extends DeviceAdminReceiver { } 2,在清单文件中配置广播接收者 <receiver android:name="com.itheima62.lockscreen.

Android一键锁屏和清除数据代码实现

android 2.2引入了支持企业应用程序提供Android设备管理API.设备管理API提供了设备管理功能在系统级别.管理员也可以远程擦(即恢复工厂默认值)丢失或被盗的手机. 但对于实现这些功能需要引入设备超级管理员(device admin),具体2.看文档 Develop-->API Guides--->Administration 下面我们看实现: 首先创建MyAdmin类,继承DeviceAdminReceiver 自己无需实现任何东西 AndroidManifest.xml配置这

[android] 手机卫士设备管理权限锁屏

设备管理员 Device Admin 获取DevicePolicyManager对象,通过getSystemService(DEVICE_POLICY_MANAGER),设备策略管理器 调用DevicePolicyManager对象的lockNow()方法,锁定,此时会报 安全异常 新建一个类MyAdmin继承系统的DeviceAdminReceiver,这个是广播接收者 清单文件进行注册 添加<receiver>节点,设置名称 设置权限 android:permission=”android

手机安全卫士------手机防盗页面之销毁数据&amp;远程锁屏

销毁数据和远程锁屏的功能都要通过获得设备管理员权限才能实现 1.首先创建一个类,继承 DeviceAdminReceiver.看类名就会猜到,它可能是一个BroadCastReceiver.通过查看源代码确定这是一个广播子类.所以要到清单文件上注册. 查看Android官方API: <receiver android:name=".MyAdmin" android:label="@string/description" android:description=