Android一键锁屏代码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaolaohuqwer/article/details/51994584

锁屏小Demo

由于手机关机键最近不好用了,所以就研究研究一键锁屏的小玩意。

首先创建一个工程

布局很简单,就一个button
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/c"
    >
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="锁屏"
        android:onClick="LockScreen"
        android:id="@+id/button"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />
</RelativeLayout>

创建一个广播

广播只需继承DeviceAdminReceiver即可
public class AdminReceiver extends DeviceAdminReceiver {
}
当然,别忘了在清单文件中注册
需要权限android:permission="android.permission.BIND_DEVICE_ADMIN"
   <receiver
         android:name=".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>
resource中的文件内容为
    <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>
mainActivity中的代码实现
   public void LockScreen(View v){
        new Thread(new Runnable() {
            @Override
            public void run() {
                SystemClock.sleep(1000);
                dpm = (DevicePolicyManager)
                        getSystemService(Context.DEVICE_POLICY_SERVICE);
                componentName = new ComponentName(getApplicationContext(),
                        AdminReceiver.class);
                if (dpm.isAdminActive(componentName)) {//判断是否有权限(激活了设备管理器)
                    dpm.lockNow();// 直接锁屏
                    //杀死当前应用
                    android.os.Process.killProcess(android.os.Process.myPid());
                }else{
                    activeManager();//激活设备管理器获取权限
                }
            }
        }).start();
    }

    private void activeManager() {
        //使用隐式意图调用系统方法来激活指定的设备管理器
        Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
        intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);
        intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "一键锁屏");
        startActivity(intent);
    }
为了避免每次进了应用都要点击Button按钮才可实现功能,所以可以直接在onCreate()方法中实现该功能
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActionBar actionBar = getSupportActionBar();
        actionBar.hide();
        setContentView(R.layout.activity_main);
        new Thread(new Runnable() {
            @Override
            public void run() {
                SystemClock.sleep(1000);
                dpm = (DevicePolicyManager)
                        getSystemService(Context.DEVICE_POLICY_SERVICE);
                componentName = new ComponentName(getApplicationContext(),
                        AdminReceiver.class);
                if (dpm.isAdminActive(componentName)) {//判断是否有权限(激活了设备管理器)
                    dpm.lockNow();// 直接锁屏
                    //杀死当前应用
                    android.os.Process.killProcess(android.os.Process.myPid());
                }else{
                    activeManager();//激活设备管理器获取权限
                }
            }
        }).start();

    }
由于每次点击桌面图标会需要一点时间去处理逻辑功能,会产生闪屏效果,所以我选择在线程中睡1s钟。
当然,可以自己设置一个好看点的背景图片,就Ok了。如有不足之处,请指出,谢谢!

源码链接

欢迎关注公众号
这里写图片描述

展开阅读全文

没有更多推荐了,返回首页