import android.app.Activity;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
/**
* @author 王杰
* @time 2017/2/13 20:57
* @desc 高级API激活和一键锁屏
*/
public class MainActivity extends Activity {
private ComponentName mComponentName;
private DevicePolicyManager mDevicePolicy;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lock_ping);
//获取到系统内部的高级API管理者
mDevicePolicy = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
//先判断是否已经激活
//ComponentName组件名称,用来做页面跳转的
//此处可以检测是否本页面把广播开启
mComponentName = new ComponentName(this, MyAdmin.class);
}
public void startActive(View view) {
//开启一个手机系统的Activity
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mComponentName);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "点我激活,获取高级管理员权限");
startActivity(intent);
}
public void lockSreen(View view) {
//判断高级API是否已经激活
if (mDevicePolicy.isAdminActive(mComponentName)) {
//实现锁屏
mDevicePolicy.lockNow();
} else {
Toast.makeText(getApplicationContext(), "请先一键激活才能使用", Toast.LENGTH_SHORT).show();
}
}
public void unLoad(View view) {
//判断高级API是否已经激活
if (mDevicePolicy.isAdminActive(mComponentName)) {
//取消激活高级API
mDevicePolicy.removeActiveAdmin(mComponentName);
}
//卸载应用
Intent intent = new Intent();
intent.setData(Uri.parse("package:" + "com.wanggjie.lockping"));
intent.setAction(Intent.ACTION_DELETE);
MainActivity.this.startActivity(intent);
}
}
package com.wanggjie.lockping;
import android.app.admin.DeviceAdminReceiver;
import android.content.Context;
import android.content.Intent;
/**
* @author 王杰
* @time 2017/2/14 17:12
* @desc 高级API的广播类
*/
//自定义一个高级Admin类继续DeviceAdminReceiver
public class MyAdmin extends DeviceAdminReceiver {
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
}
}
实现激活高级API的条件:
1.自定义一个广播接收者
<receiver
android:name=".MyAdmin"
android:description="@string/sample_device_admin_description"
android:label="这是激活高级管理员权限的操作"
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>
2.在values文件下的Strings.xml定义一个String:
<string name="sample_device_admin_description">这个是允许用户开启一键锁屏和一键卸载的功能</string>
3.在res文件下创建一个xml文件夹:
<?xml version="1.0" encoding="utf-8"?> <device-admin xmlns:android="http://schemas.android.com/apk/res/android"> <uses-policies> <reset-password /> <force-lock /> <wipe-data /> <expire-password /> </uses-policies> </device-admin>