由于最近做到自定义锁屏,不由联想到了一键锁屏的实现,网上简单看了一下,写了一个简单的demo,写下来以后做个记录。
直接上代码:
MainActivity代码:
package com.dfwy.cxy.onecodetolock;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity{
private ComponentName componentName;
private DevicePolicyManager policyManager;
private Button btn_suo1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_suo1 = (Button) findViewById(R.id.button1);
btn_suo1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//获取设备管理器服务
policyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
//AdminReceiver继承自DeviceAdminReceiver
componentName = new ComponentName(MainActivity.this, AdminReceiver.class);
mylock();
//killMyself,锁屏之后就立即kill掉我们的activity,避免浪费资源
android.os.Process.killProcess(android.os.Process.myPid());
}
});
}
private void mylock(){
boolean active = policyManager.isAdminActive(componentName);
Log.i("tag","===activity======"+active);
if(!active){//若无权限
activeManage();//去获得权限
policyManager.lockNow();//并锁屏
}
if (active) {
policyManager.lockNow();//直接锁屏
}
}
private void activeManage() {
// 启动设备管理(隐式Intent) - 在AndroidManifest.xml中设定相应过滤器
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
//权限列表
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);
//描述(additional explanation)
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "------ 其他描述 ------");
startActivityForResult(intent, 0);
}
}
这里用到一个AdminReceiver.class
内容是空的,不必要写内容,代码如下:
package com.dfwy.cxy.onecodetolock;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
/**
* Created by cxy on 2016/12/26.
*/
public class AdminReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
}
}
在res文件夹下,建立xml文件夹,建立lock_screen.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<device-admin
xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<!-- 强行锁定 在里仅这个是需要的-->
<force-lock />
<!-- 清除所有数据(恢复出厂设置) -->
<wipe-data />
<!-- 重置密码 -->
<reset-password />
<!-- 限制密码选择 -->
<limit-password />
<!-- 监控登录尝试 -->
<watch-login />
</uses-policies>
</device-admin>
在Manifest文件夹下加上权限和注册Receiver
<!-- 灭屏权限 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DEVICE_POWER" />
<!-- 设备管理 -->
<receiver android:name=".AdminReceiver"
android:label="@string/app_name"
android:description="@string/app_name"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data android:name="android.app.device_admin"
android:resource="@xml/lock_screen" />
<intent-filter>
<action
android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
OK,代码地址如下:
点击下载demo
http://download.csdn.net/detail/xiaoyu940601/9721206