一、大体逻辑:点击应用图标,如果已经获得相应设备权限就直接进行锁屏lockNow()并finish()自身的activity; 如果还没有获得权限就去开启设备管理器获得权限。
二、项目代码:
1. 主程序java代码 MainActivity.java
package com.example.OneKeyLockScreen;
import com.example.absdb.R;
import android.os.Bundle;
import android.app.Activity;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Intent;
public class MainActivity extends Activity {
private DevicePolicyManager dpm;
private static final int REQUEST_CODE_ADD_DEVICE_ADMIN=100;
//声明组件名
private ComponentName componentName;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
componentName = new ComponentName(this, AdminReceiver.class);
//获得设备管理器
dpm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
if (dpm.isAdminActive(componentName)) {
//如果获得了权限直接锁屏
dpm.lockNow();
finish();
}else{
//如果没获得权限就执行startAddDeviceAdminAty()开启超级设备管理器
startAddDeviceAdminAty();
}
setContentView(R.layout.activity_main);
}
//开启设备管理器
private void startAddDeviceAdminAty(){
Intent i = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
//权限列表
i.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
componentName);
//权限描述
i.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
"感谢使用“一键锁屏”。本应用需要激活设备管理器(任何一键锁屏软件都需要该操作),激活即可使用,绝对安全,放心使用");
startActivity(i);
}
//进行锁屏
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
boolean active = dpm.isAdminActive(componentName);
if(!active){//若无权限
startAddDeviceAdminAty();//去获得权限
dpm.lockNow();;//并锁屏
}
if (active) {
dpm.lockNow();
finish();//直接锁屏
}
super.onActivityResult(requestCode, resultCode, data);
}
}
2. 新建一个设备管理的接收者去继承DeviceAdminReceiver
AdminReceiver.java
package com.example.OneKeyLockScreen;
import android.app.admin.DeviceAdminReceiver;
public class AdminReceiver extends DeviceAdminReceiver {
}
3.在清单文件对 AdminReceiver广播接收者进行注册
<receiver android:name="com.example.OneKeyLockScreen.AdminReceiver"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data android:name="android.app.device_admin"
android:resource="@xml/device_admin" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/>
</intent-filter>
</receiver>
4. 在res下新建文件夹xml,并在里面新建文件device_admin.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>