现在的手机屏幕越来越大,单手操控起来颇为不便,比如锁屏。电源键一般为实体键,经常按难免损耗。所以一键锁屏软件应运而生,既能方便地锁屏,还能减少电源键损耗。甚至许多手机厂商在自家的rom里集成了这个功能,如MIUI。然而也有没有集成锁屏功能的,比如我的手机,只好自己去网上下载。应用市场里五花八门的锁屏软件,有的下载下来还有广告,或者其他一堆的功能。但是我只需要单纯的锁屏功能。所以索性我自己来写一个,自己用得才踏实。自己还起了个好玩的名字“拯救电源键”。

经过网上查阅资料,并一步步实现了这个小应用。在前辈们的基础上,我将讲解得更加详尽,以供初学者交流学习。还将提供安装包优化的方法(最后我的安装包只有16KB大)。好了,进入项目讲解。

一、项目结构。需要自己写的地方都展开了,如图:

一目了然吧。

二、代码。讲解请看注释。

1、MyLockActivity.java

package app.lockscreen;import xw.onekeylockscreen.R;
import android.app.Activity;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;public class MyLockActivity extends Activity {//设备管理器DevicePolicyManager mPolicyManager;//ComponentName(组件名称)是用来打开其他应用程序中的Activity或服务的ComponentName componentName;//requestCodepublic static final int MY_REQUEST_CODE = 10086;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//获得设备管理器服务mPolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);//这里的MyReceiver是DeviceAdminReceiver的子类componentName = new ComponentName(this, MyReceiver.class);//先判断是否具备锁屏权限,如果具有,则执行lockNow()方法锁屏并finish()当前Activity//安装后第一次运行都要去获得权限if (mPolicyManager.isAdminActive(componentName)){mPolicyManager.lockNow();finish();} else {getAdminActive();//获取权限}//有人说将setContentView()方法放在后面可以避免锁屏后闪一下。//但我试过放在前后都看不出什么区别,估计是手机处理太快了吧setContentView(R.layout.main_layout);//锁屏后关闭自己的进程,节约资源android.os.Process.killProcess(android.os.Process.myPid()); }/*** 获取锁屏权限*/private void getAdminActive() {// 启动设备管理(隐式Intent) - 在AndroidManifest.xml中设定相应过滤器Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);//权限列表intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);//添加描述,在第一次启动需要权限激活时,可以看到自定义的描述intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "点击“激活”后才能使用锁屏功能哦^^");startActivityForResult(intent, MY_REQUEST_CODE);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {//获取权限成功,锁屏并finish(),否则继续获取权限if (requestCode == MY_REQUEST_CODE && requestCode == Activity.RESULT_OK){mPolicyManager.lockNow();finish();} else {getAdminActive();//继续获取权限}super.onActivityResult(requestCode, resultCode, data);}
}

2、MyReceiver.java

package app.lockscreen;import android.app.admin.DeviceAdminReceiver;public class MyReceiver extends DeviceAdminReceiver {//这个类里可以啥也不写
}

3、在AndroidManifest.xml里注册 MyLockActivity和MyReceiver,看名字就知道前面是Activity,后面是Receiver。请记得给MyLockActivity加上属性:

android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
或
android:theme="@android:style/Theme.NoDisplay"

这样可以确保锁屏后屏幕不会闪一下。

三、XML文件。

1.main_layout。很简单,因为不需要界面显示,所以设一个空的线性布局或相对布局都没问题。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ></LinearLayout>

2、my_lock_screen.xml。这里设置锁屏的权限,所以不可或缺。这里先提一句,这个文件名要在manifest里导入。需要注意的是这里面的字段不能Alt+/自动提示,需要手动敲。

<?xml version="1.0" encoding="utf-8"?>
<device-admin xmlns:android="http://schemas.android.com/apk/res/android"><uses-policies><!-- 强制锁屏 --><force-lock /></uses-policies></device-admin>

3、AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="xw.onekeylockscreen"android:versionCode="1"android:versionName="1.01" ><uses-sdkandroid:minSdkVersion="10"android:targetSdkVersion="10" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><!--注册MyLockActivity的内容 --><activityandroid:name="app.lockscreen.MyLockActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><!--注册MyReceiver的内容 --><receiverandroid:name="app.lockscreen.MyReceiver"android:description="@string/app_name"android:label="@string/app_name"android:permission="android.permission.BIND_DEVICE_ADMIN" ><meta-dataandroid:name="android.app.device_admin"android:resource="@layout/my_lock_screen"/> <!--刚才说的需要导入的文件名 --><intent-filter><action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /></intent-filter></receiver></application></manifest>

至此,项目中所有的代码部分结束了。不出意外,可以在手机上运行了。

下面介绍如何给apk安装包瘦身。

五、优化安装包。

当我写完导出apk后发现安装包有几百KB,然后我又把drawable下的logo图删得只剩一张,还是与网上其他小的一键锁屏软件安装包容量相距甚远。然后我又查了如何给apk瘦身的资料,发现了如下方法:

选中当前项,右键选择“properties”,选择“Java Build Path”,选择“Order and Export”,只勾选中最后那一项(前两项是必选的,会发现点击没有反应),如图:

这样你的安装包就可以变瘦啦。可以与优化前对比效果。

六、源码和apk下载。

源码: http://download.csdn.net/detail/u013724061/7684565

apk:http://download.csdn.net/detail/u013724061/7684569

logo图也贴出来吧,我自己找图P的,感觉还不错。手里没有现成的图的话将就用啦,但记得自己调整分辨率哈。

【拯救电源键】最详尽的android开发一键锁屏实例 提供免费源码+apk相关推荐

  1. Android简易实战教程--第五话《开发一键锁屏应用》

    转载请注明出处:http://blog.csdn.net/qq_32059827/article/details/51860900 点击打开链接 Device Administration 对于这个应 ...

  2. android实现一键锁屏

    最近想写一个一键锁屏功能的android小程序,找了很多网上的例子,也看了SDK文档,几乎所有的代码都大同小异,但是有很多人都会在调试的时候出现各种问题,大多数人的Logcat中都会出现:" ...

  3. 【绝对给力】Android开发免豆资料(教程+工具+源码)下载地址汇总 【转载自51CTO】

    下载中心特意为广大搞android开发的同学整理了一批0下载豆的资料,希望大家喜欢~ 资料目录下载:http://down.51cto.com/data/439071 目录内容无格式浏览: 教程下载: ...

  4. Android开发免豆资料(教程+工具+源码)下载地址汇总

    下载中心特意为广大搞android开发的同学整理了一批0下载豆的资料,希望大家喜欢~ 资料目录下载: http://down.51cto.com/data/439071 目录内容无格式浏览: 教程下载 ...

  5. android开发 自定义锁屏界面,插件锁屏桌面自定义 “安卓4.0”界面美化教程

    距离Android4.0系统的正式发布已经过去一段时间,除了最先搭载该系统的三星Galaxy Nexus.华为荣耀Android4.0商用版以及小米手机MIUI4.0等,多数用户目前仍然处于观望阶段. ...

  6. Android开发知识(二十三)从源码角度分析ListView的滑动复用机制

    文章目录 前言 认识RecycleBin机制 ListView的布局方式 ListView的元素创建流程 ListView滑动加载过程 前言 ListView作为一个常用的列表控件,虽然现在基本被Re ...

  7. Android开发之拍照功能实现(附源码)

    大家好,这是一个简单的拍照功能,很简单的界面,一个显示图像区域SurfaceView一个"拍照"按钮.直接上代码! 1.CameraDemoActivity.java(主界面) p ...

  8. 基于Android开发的在线考试系统(附带源码)

    管理员:管理员使用本系统涉到的功能主要有:首页.个人中心.学生管理.教师管理.考试公告管理.管理员管理.试题管理.试卷管理.系统管理.考试管理等功能. 教师:教师进入app可以对:首页.个人中心.学生 ...

  9. Android开发的单词本APP项目介绍及源码(大作业)

    该单词本APP的功能主要有两个: 1.翻译功能:调用百度翻译API实现 翻译界面图片如下: 2.收藏.添加单词的功能 点击右下角加号可进行手动添加单词记录: 也可在翻译界面(即本篇文章第一张图片),点 ...

最新文章

  1. win安装wordcloud报错解决方案
  2. template模板中插入自定义参数
  3. 细说Android 4.0 NDK编程pdf
  4. java 加日志_java中添加日志
  5. 6 如何查看MESSAGE消息
  6. 程序员的算法课(15)-分治法获取文件中出现频次最高100词
  7. linux 命令 —— cp
  8. PowerBuilder GRID美化
  9. 物联网毕业设计 - 基于单片机的高精度北斗定位控制终端
  10. 定义控制台应用程序的入口点 ConsoleApplication
  11. 3g显卡测试软件,显卡测试平台说明及Heaven benchmark
  12. PPT文件太大?如何压缩PPT?这几招帮你搞定
  13. 【日语】英语26个字母的日语读法
  14. 使用 Spirent TestCenter 进行 4-7 层测试
  15. [愚见]《EnlightenGAN: Deep Light EnhancementWithout Paired Supervision》
  16. 灌区续建配套与信息化改造工程--设备选型
  17. CSR8670项目实战:BlueHeart心率监测耳机
  18. 收购家乐福中国,苏宁要做新零售第三极?
  19. codeforces 577B Modulo Sum
  20. BAT 批处理脚本 教程

热门文章

  1. 教你如何求多项式的系数
  2. 2022秋冬穿搭趋势!小红书榜单,挖掘4大时髦模式
  3. 锂电池保护板的分类有哪些?
  4. 仿微信朋友圈日期显示 时间戳格式化
  5. 对我影响最大的4句名言
  6. 如何处理投递的邮件被趋势RBL拦截的问题
  7. 英文歌曲:big big world(大世界)
  8. 学外语看影视剧推荐国外佳片
  9. 这次是真的被优化了。
  10. 【Error】Error running process: CreateProcess failed. Code 2