Android笔记:android一键锁屏

由于最近做到自定义锁屏,不由联想到了一键锁屏的实现,网上简单看了一下,写了一个简单的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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值