添加当前程序到设备管理列表里

原创 2016年06月01日 17:50:44

1、权限配置

详细请参考Device Administration以及DeviceAdminReceiver的相关文档
根据sdk文档,说明,先创建Androidmanifest.xml,它必须包含如下信息

  1. 子类(继承自DeviceAdminReceiver)需要包含以下两点:

    • 必须拥有BIND_DEVICE_ADMIN
    • 能处理ACTION_DEVICE_ADMIN_ENABLED的intent请求,并在xml中声明为一个intent
  2. 在metadata中进行安全声明

    下面是一个manifest例子

        <receiver
            android:name=".myDeviceAdminReceiver"
            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>
a) meta-data项是必须的,还有权限以及intent-filter
b) android:resource对应的xml需要自己创建,并放在xml目录下,xml目录没有自己创建,其内容如下:
<?xml version="1.0" encoding="utf-8"?>
<device-admin
  xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-policies>
        <force-lock />
    </uses-policies>
</device-admin>

2、代码部分,创建继承子类MyDeviceAdminReceiver

public class myDeviceAdminReceiver extends DeviceAdminReceiver{

    private static String TAG = "TestHello"; 
    @Override
    public void onEnabled(Context context, Intent intent) {
        // TODO Auto-generated method stub
        super.onEnabled(context, intent);
        Toast.makeText(context, context.getResources().getString(R.string.device_admin_jihuo_success_tips), Toast.LENGTH_LONG).show();;
        Log.i(TAG, "DeviceAdminReceiver::onEnabled");
    }

    @Override
    public CharSequence onDisableRequested(Context context, Intent intent) {
        // TODO Auto-generated method stub
        //这里如果返回的字符串不为空,那么当用户去设置里取消时,则会提示带此文字的确定框
        String strResult = "请不要取消,谢谢!!!";
        Log.i(TAG, "DeviceAdminReceiver::onDisableRequested");
        //return super.onDisableRequested(context, intent);
        return strResult;
    }

    @Override
    public void onDisabled(Context context, Intent intent) {
        // TODO Auto-generated method stub
        super.onDisabled(context, intent);
        Log.i(TAG, "DeviceAdminReceiver::onDisable");
        Toast.makeText(context, context.getResources().getString(R.string.device_admin_cancel_jihuo_tips), Toast.LENGTH_LONG).show();;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        super.onReceive(context, intent);
        Log.i(TAG, "DeviceAdminReceiver::onReceive");
    }

}

3、编写添加进入设备的代码

    public void OpenDevicePolicyManager(Context context)
    {
        DevicePolicyManager dManager = (DevicePolicyManager) context.getSystemService("device_policy");//获取manager对象
        ComponentName localComponentName = new ComponentName(this, myDeviceAdminReceiver.class);
        if (dManager != null && 
            localComponentName != null && 
            false == dManager.isAdminActive(localComponentName)) {
            Intent localIntent = new Intent(dManager.ACTION_ADD_DEVICE_ADMIN);
            localIntent.putExtra(dManager.EXTRA_DEVICE_ADMIN, localComponentName);
            localIntent.putExtra(dManager.EXTRA_ADD_EXPLANATION, 
                                 context.getResources().getString(R.string.device_admin_explanation));
            startActivityForResult(localIntent, ActivityResult);
        }
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        //用于判断是否startActivity成功,需要xml中的配置权限才能设置成功
        super.onActivityResult(requestCode, resultCode, data);
        Log.i(TAG, "onActivityResult,resultCode:"+resultCode);
        if (-1 == resultCode) {
            Toast.makeText(this, this.getResources().getString(R.string.device_admin_jihuo_success_tips), Toast.LENGTH_LONG).show();;
        }
        else {
            Toast.makeText(this, this.getResources().getString(R.string.device_admin_jihuo_failed_tips), Toast.LENGTH_LONG).show();;
        }
    }
版权声明:本文为博主原创文章,未经博主允许不得转载。

关于DevicePolicyManager申请系统管理权限

自从安卓2.2(API=8)以后,安卓手机是通过设备管理API对手机进行系统级的设备管理。 本篇通过大家熟悉的“一键锁屏”的小项目实现来介绍设备管理API如何通过强制设备管理策略创建一个安全敏感的应...

Android自动化测试之UIAutomator(一)

一、自动化测试的必要性 Android程序开发迭代周期短,测试case重复度高,大部分case属于功能验证,常规的测试方法是测试人员按照预先写好的Case手顺进行测试,人工比对操作结果和预期结果。这...

WebView加载过程进度条显示

好久没写了,一看都11月份了,最近一直在忙项目开发,经常

Android中如何通过强制设备管理策略创建一个安全敏感的应用程序

作者:zachgenius 原文链接: http://docs.eoeandroid.com/training/enterprise/device-management-policy.html 完...

C语言程序设计-计算机设备管理

#include #include #include #include struct node  { char no[12]; char name[40]; float dj;//单价...

电机设备管理小程序

  • 2012年09月09日 01:19
  • 811KB
  • 下载

全成公司的设备管理程序

  • 2007年03月06日 00:01
  • 57KB
  • 下载

rtt学习笔记二:I/O设备管理

I/O设备管理 I/O管理模块为应用提供了一个对设备进行访问的通用接口,并通过定义的数据结构对设备驱动程序和设备信息进行管理。 I/O管理模块实现了对设备驱动程序的封装:设备驱动程序的实现与I/O...

设备管理程序

  • 2013年05月28日 16:41
  • 40.49MB
  • 下载

移动存储设备管理程序

  • 2009年03月14日 14:17
  • 46KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:添加当前程序到设备管理列表里
举报原因:
原因补充:

(最多只允许输入30个字)