APK下载

源程序下载

锁屏流程如下(参考于Android一键锁屏开发全过程【源码】【附图】)

源码参考于一键锁屏 源码

一共有2个Java文件:

1 package com.example.onekeylock.app;
2
3 import android.app.admin.DeviceAdminReceiver;
4
5 public class AdminReceiver extends DeviceAdminReceiver{}

AdminReceiver.java

 1 package com.example.onekeylock.app;
 2
 3 import android.app.Activity;
 4 import android.app.admin.DevicePolicyManager;
 5 import android.content.ComponentName;
 6 import android.content.Context;
 7 import android.content.Intent;
 8 import android.os.Bundle;
 9 import android.support.v7.app.ActionBarActivity;
10
11 public class MainActivity extends ActionBarActivity
12 {
13     private DevicePolicyManager policyManager;
14     private ComponentName componentName;
15     private static final int MY_REQUEST_CODE = 9999;
16
17     @Override
18     protected void onCreate(Bundle savedInstanceState)
19     {
20         super.onCreate(savedInstanceState);
21         //获取设备管理服务
22         policyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
23         componentName = new ComponentName(this, AdminReceiver.class);
24         /*
25         * 假如先判断是否有权限,如果没有则调用activeManage(),然后立即锁屏,再finish()。
26         * 这样做是有问题的,因为activeManage()可能还在等待另一个Activity的结果,那么此时依然没有权限却
27         * 执行了lockNow(),这样就出错了。
28         * 处理方法有2个:
29         * 1、是重写OnActivityResult()函数,在里面判断是否获取权限成功,是则锁屏并finish()
30         * 否则继续调用activeManage()获取权限(这样激活后立即锁屏,效果很好)
31         * 2、不重写OnActivityResult()函数,第一次获取权限后不锁屏而立即finish(),这样从理论上说也可能
32         * 失败,可能权限还没获取好就finish了(这样激活后就回到桌面,还得再按一次锁屏才能锁)
33         * 综上推荐第一种方法。*/
34
35         //判断是否有锁屏权限,若有则立即锁屏并结束自己,若没有则获取权限
36         if (policyManager.isAdminActive(componentName))
37         {
38             policyManager.lockNow();
39             finish();
40         }
41         else
42         {
43             activeManage();
44         }
45         setContentView(R.layout.activity_main); //把这句放在最后,这样锁屏的时候就不会跳出来(闪一下)
46     }
47
48     //获取权限
49     private void activeManage()
50     {
51         // 启动设备管理(隐式Intent) - 在AndroidManifest.xml中设定相应过滤器
52         Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
53
54         //权限列表
55         intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);
56
57         //描述(additional explanation)
58         intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "激活后才能使用锁屏功能哦亲^^");
59
60         startActivityForResult(intent, MY_REQUEST_CODE);
61     }
62
63     @Override
64     protected void onActivityResult(int requestCode, int resultCode, Intent data)
65     {
66         //获取权限成功,立即锁屏并finish自己,否则继续获取权限
67         if (requestCode == MY_REQUEST_CODE && resultCode == Activity.RESULT_OK)
68         {
69             policyManager.lockNow();
70             finish();
71         }
72         else
73         {
74             activeManage();
75         }
76         super.onActivityResult(requestCode, resultCode, data);
77     }
78 }

MainActivity.java

布局文件:

1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
2     android:layout_width="fill_parent"
3     android:layout_height="fill_parent">
4 </RelativeLayout>

activity_main.xml

这个是获取权限时显示的权限列表

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <device-admin
 3     xmlns:android="http://schemas.android.com/apk/res/android"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent">
 6     <uses-policies>
 7         <!--强制锁屏-->
 8         <force-lock/>
 9     </uses-policies>
10 </device-admin>

lock.xml

修改原来的styles.xml

1 <resources>
2     <!-- Base application theme. -->
3     <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
4         <!-- Customize your theme here. -->
5         <item name="android:windowNoTitle">true</item>
6         <item name="android:windowIsTranslucent">true</item>
7     </style>
8 </resources>

styles.xml

配置文件

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3           package="com.example.onekeylock.app">
 4     <application
 5         android:allowBackup="true"
 6         android:icon="@drawable/onekeylock"
 7         android:label="@string/app_name"
 8         android:theme="@style/AppTheme">
 9         <activity
10             android:name="com.example.onekeylock.app.MainActivity"
11             android:label="@string/app_name">
12             <intent-filter>
13                 <action android:name="android.intent.action.MAIN"/>
14                 <category android:name="android.intent.category.LAUNCHER"/>
15             </intent-filter>
16         </activity>
17         <receiver
18             android:name=".AdminReceiver"
19             android:label="@string/app_name"
20             android:description="@string/app_name"
21             android:permission="android.permission.BIND_DEVICE_ADMIN">
22             <meta-data
23                 android:name="android.app.device_admin"
24                 android:resource="@layout/lock"/>
25             <intent-filter>
26                 <action
27                     android:name="android.app.action.DEVICE_ADMIN_ENABLED"/>
28             </intent-filter>
29         </receiver>
30     </application>
31 </manifest>

AndroidManifest.xml

一个Activity,打开来默认是显示它的TitleBar(标题栏)的,而锁屏的原理就是先打开Activity,再启动锁屏功能,最后把自己结束掉。

而最难的部分在于,当打开软件的时候,该软件会出现闪屏(闪现标题栏),然后才锁屏。

一个比较好的解决方法是把该Activity设置为透明的,这样即使出现标题栏也看不到。

网上大部分代码是这样解决的,在配置文件中,为Activity标签添加一个属性android:theme=@android:style/Theme.Translucent

但是由于我新建项目的时候为该项目选择了系统自带的主题(Theme.AppCompat.Light.DarkActionBar),所以配置文件中,Application标签已经声明了主题(见下图),如果继续在Activity中添加主题的话会运行出错!

OK,那我把Application的主题删了,只为Activity配置透明主题行了吧………………可是还是运行出错!没深入研究过Android,所以不知怎么会这样……

最后磕磕碰碰,摸索出一个方法,修改Application的主题,添加下面2句(只添加1句透明的应该也行,没试过)

至此,终于不再闪屏了……

转载于:https://www.cnblogs.com/chenyg32/p/3719714.html

Android一键锁屏源码相关推荐

  1. DevStore一键锁屏源码学习

    项目结构: 代码 MainActivity.java package com.test.lockscreen;import com.test.lockscreen.LockReceiver;impor ...

  2. java 挂机锁屏 源码_一键锁屏 源码

    3.[文件] MainActivity.java ~ 2KB 下载(46) package com.feng.onekeylockscreen; import android.os.Bundle; i ...

  3. android 魔力锁屏源码,打造最炫手机锁屏桌面 10款安卓魔力锁屏主题推荐

    安卓魔力锁屏主题:个性情侣锁屏 这又是一款非常新潮的安卓魔力锁屏主题.锁屏界面上有一对情侣拿着手枪,界面展现方式与iPhone的非常相似.解锁方式采用的是屏幕下端横向拉动解锁. 安卓魔力锁屏主题:个性 ...

  4. 一键锁屏源代码c语言,Android一键锁屏开发全过程【源码】【附图】

    一.项目简介: 项目:<Android 一键锁屏> 开发周期:4天 代码量:100行 ------------------------ 二.项目流程: 三.项目代码 1.主程序代码: Ja ...

  5. android锁屏软件开发,Android一键锁屏开发全过程

    一.项目简介: 项目:<Android 一键锁屏> 开发周期:4天 代码量:100行 二.项目流程: 三.项目代码 1.主程序代码: 1.private DevicePolicyManag ...

  6. Android一键锁屏代码

    锁屏小Demo 由于手机关机键最近不好用了,所以就研究研究一键锁屏的小玩意. 首先创建一个工程 布局很简单,就一个button <?xml version="1.0" enc ...

  7. Android一键锁屏功能的实现

    前不久换了部新手机,因为原来用的手机原装了一键锁屏的应用,用的还习惯,新手机上没有,就想着找一个装上,后来在网上搜了下一键锁屏的实现,自己拿来改了改,安装后感觉还可以.现在分享出来. 源码: 1. M ...

  8. Android一键锁屏的实现

    1.首先创建类AdminReceiver继承DeviceAdminReceiver 该方式可以什么都不写~ 2.在AndroidManifest.xml中注册 <!-- 设备管理 --> ...

  9. Android一键锁屏的例子

    先说点题外话,lenovo的手机质量真不是特叫人放心,不如他家的电脑.媳妇的手机电源键不怎么好用了,好在点亮屏幕可以使用侧边的音量键,但是锁屏就只能按电源键了,经常按了好几次都锁不上.于是,有了下面关 ...

最新文章

  1. 如何安装python3.7.4_银河麒麟安装Python3.7.4以及升级自带OpenSSL
  2. dig linux下的使用
  3. Golang库学习笔记 Gin(三)
  4. BPSK信号matlab,BPSK信号调制解调与MATLAB仿真.docx
  5. 工作和人工智能的未来
  6. 【汇总推荐】深度学习、自然语言处理干货笔记汇总
  7. 使用maven聚合安装多个maven工程到本地仓库报错的解决方法:child module pom.xml does not exist
  8. Tomcat 启动报错The APR based Apache Tomcat Native l...
  9. 计算机二级c语言公共基础知识(免费的) 百度云,计算机二级c语言公共基础知识(免费的).doc...
  10. java导入lang_为什么java.lang不需要导放
  11. 如何用 CNN 玩转 AlphaGo 版的五子棋?
  12. Rickie的软件测试学习笔记-第四周
  13. PyCharm中文设置方法(超级简单,一看就会,无需汉化包~)
  14. oracle----globle temp table
  15. layui.css如何使用,Layui新手教程
  16. 使用python将pdf转化为长图片
  17. JavaScript 可能问到的零星知识点
  18. 平安科技2017笔试题目
  19. css常用样式,导致页面css样式混乱的原因,css遇到的问题,我和小伙伴们惊呆了
  20. 6-10 两个字符串穿插 (10分)pta,c

热门文章

  1. 0010101 java_Java基础整理笔记(2)
  2. 植物大战僵尸资源提取
  3. php nuke是什么,phpnuke中文站 - phpnuke安装步骤
  4. SV中的采样和数据驱动
  5. android 面试题
  6. Pytorch_Geometric(PyG)使用DataLoader报错RuntimeError: Sizes of tensors must match except in dimension 0.
  7. 010 红外非接触测温传感器
  8. c shell 命令提示符大全
  9. matlab怎么把小数化为分数,matlab怎么把分数转化为小数
  10. 企业如何做战略规划------5看3定是不是套路,反正大企业就那么做的,。。。。。。。