开发中遇到锁屏和唤醒屏幕的功能,顺便就想开发一个“一键锁屏”的app,然后就有了这篇文章。。。哈哈哈

 

首次打开必须用户手动授权锁屏功能;如下图:点击激活

第一步、在AndroidManifest.xml中配置:

                    

 第二步、配置中的my_device_admin代码 、MyDeviceAdminReceiver的代码

2.1、在res/xml中自定义my_device_admin.xml文件,我只配置了锁屏权限

<?xml version="1.0" encoding="utf-8"?>                    

2.2、新建MyDeviceAdminReceiver类

//可以不实现任何方法,继承空类即可public class MyDeviceAdminReceiver extends DeviceAdminReceiver {//    @Override//    public void onReceive(Context context, Intent intent) {//        super.onReceive(context, intent);//        Log.e("snoww", "onreceiver");//    }////    @Override//    public void onEnabled(Context context, Intent intent) {//        Log.e("snoww", "激活使用");//        super.onEnabled(context, intent);//    }////    @Override//    public void onDisabled(Context context, Intent intent) {//        Log.e("snoww", "取消激活");//        super.onDisabled(context, intent);//    }}

第三步、 mainactivity的完整代码:

public class MainActivity extends AppCompatActivity {    DevicePolicyManager dpm;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        lock();    }    //锁屏    private void lock() {        dpm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);        ComponentName componentName = new ComponentName(this, MyDeviceAdminReceiver.class);        // 判断该组件是否有系统管理员的权限        boolean isAdminActive = dpm.isAdminActive(componentName);        if (!isAdminActive) {//这一句一定要有...            Intent intent = new Intent();            intent.setAction(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);            intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);            startActivityForResult(intent, 101);        }        //isAdminActive 为false,直接调用dpm.lockNow()会报java.lang.SecurityException: No active admin owned by uid 10510 for policy #3        if (isAdminActive) {            dpm.lockNow();            //杀掉进程            android.os.Process.killProcess(android.os.Process.myPid());        }    }    @Override    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {        super.onActivityResult(requestCode, resultCode, data);        //这种方式可能会造成自动重启//        android.os.Process.killProcess(android.os.Process.myPid());        //授权技术关闭应用        finish();    }}

最后将mainactivity的主题设置为透明,就可以了;

 

体验APP地址

更多相关文章

  1. Android定制ListView的界面(使用继承自ArrayAdapter的自定义适配
  2. Android(安卓)中的ORM框架
  3. 操作 Android(安卓)模拟器
  4. Android(安卓)处理屏幕旋转
  5. Android(安卓)AIDL实现调用第三方登录
  6. Android中获取手机支持的硬件解码器类型以及对应的解码器名称
  7. 原:Android(安卓)获取屏幕高度、标题高度、状态栏高度详解
  8. 自定义View系列教程07--详解ViewGroup分发Touch事件
  9. Android跨进程通信 AIDL使用

随机推荐

  1. 当年pass到很多扒手的题
  2. 我的第35个代码
  3. js逆向破解百度翻译
  4. Pycharm 被低估了的 10 个快捷键
  5. ||运算你真的了解吗?
  6. 用 Python 自动定时发微博
  7. 还在一行一行的写html,感受痛苦吧
  8. springboot|springboot集成redis缓存
  9. <Oracle优化新常态> 第十一章 WHO-IT的等
  10. 2021年激活码激活PhpStorm全教程