Android注册设备管理器(获取超级管理员权限)

注意:一旦一个应用开启了超级管理员权限,是不能直接在  设置--->应用程序里  进行删除的(删除失败)   

必须要在  设置--->位置和安全--->选择设备管理器  里取消要删除应用的激活  然后再去应用程序里删除

1.创建一个DeviceAdminReceiver子类(DeviceAdminReceiver是广播接收者的子类)

import android.app.admin.DeviceAdminReceiver;

public class MyAdmin extends DeviceAdminReceiver {
	
}

2.配置广播接收者清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xxc.lockscreen"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="19" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.xxc.lockscreen.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver
            android:name="com.xxc.lockscreen.MyAdmin"
            android:description="@string/sample_device_admin_description"
            android:label="@string/sample_device_admin"
            android:permission="android.permission.BIND_DEVICE_ADMIN" ><!-- description和label都是strings.xml里配置的 -->
            <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>

values目录下的strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">一键锁屏</string>
    <string name="hello_world">Hello world!</string>
    <string name="action_settings">Settings</string>
    <string name="sample_device_admin_description">此应用用于锁屏</string><!-- 见图一 -->
    <string name="sample_device_admin">锁屏</string><!-- 见图一 -->
</resources>

3.在res目录下创建xml文件夹,再此文件夹里创建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 />
  </uses-policies>
</device-admin>

4.在Activity里调用

package com.xxc.lockscreen;

import android.app.Activity;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.ComponentInfo;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;

/**
 * 步骤:
 * 1.创建一个类继承DeviceAdminReceiver
 * 2.因为DeviceAdminReceiver是一个广播接收者,那么就需要在清单文件里配置receiver  
 * <receiver
            android:name="com.xxc.lockscreen.MyAdmin"
            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="@xml/device_admin_sample" />			  //在res下创建xml文件夹,并创建device_admin_sample.xml文件

            <intent-filter>
                <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
            </intent-filter>
   </receiver>
 *3.device_admin_sample.xml文件内容为:
 *<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.设置--->设备管理器--->将锁屏程序勾选激活
 *
 *5.而让一般的用户手动执行第四步会感觉很繁琐,所以在界面上加一个CheckBox组件,直接完成第四步的操作
 */
public class MainActivity extends Activity {
	private DevicePolicyManager dpm;
	private CheckBox cb_status;
	private ComponentName mDeviceAdminSample;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		dpm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);//设备策略管理器
		cb_status = (CheckBox) findViewById(R.id.cb_status);//复选框组件
		//第一个参数 上下文  第二个参数  需要被激活的超级管理员类
		mDeviceAdminSample = new ComponentName(getApplicationContext(), MyAdmin.class);
		isOpen();//判断是否激活,再进行对应的数据回显
		
		cb_status.setOnCheckedChangeListener(new OnCheckedChangeListener() {//多选框勾选状态改变的监听器
			@Override
			public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
				//以下这段都是API上复制的
				if(isChecked){//多选框被勾选,激活超级管理员
                    Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
                    intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample);
                    intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,"开启后就可以使用锁屏功能了...");//显示位置见图二
                  /*
                   * 不能直接startActivity  因为可能在激活的时候用户点击了取消,这时候CheckBox状态是勾选的,但是实际是没激活的,
				   * 所以要等打开的Activity关闭后的回调函数里去判断是否真正激活,再对CheckBox状态进行改变
                   */
                    startActivityForResult(intent, 0);
				}else{//多选框取消勾选,取消激活超级管理员
					dpm.removeActiveAdmin(mDeviceAdminSample);
				}
			}
		});
	}
	
	/**
	 * 关闭激活Activity后的回调函数
	 */
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		isOpen();
	}

	/**
	 * 检测用户是否开启了超级管理员
	 */
	private void isOpen() {
		if(dpm.isAdminActive(mDeviceAdminSample)){//判断超级管理员是否激活
			cb_status.setChecked(true);
		}else{
			cb_status.setChecked(false);
		}
	}

	public void screenLock(View view){
		dpm.lockNow();//锁屏
	}
}


图一:


图二:







  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值