立波教你做安卓一键锁屏软件
这几天感觉需要自己搞一个自己需要锁屏的软件了,没有好用的,就自己动手做一个,做技术的就这一点好处,自力更生丰衣足食。
先上一个效果图吧:
这个图我们简单罗列一下功能点:
【1】日期和时间的显示
【2】电量和电池状态的显示
【3】背景图片的切换
【4】一个小锁图片,单击之后,倒计时5秒钟进入锁屏
【5】向右滑动结束锁屏动画效果,绿色小球向右滑动解锁屏幕
针对以上5个功能点,我重点说一下【4】,其它就简略说说实现思路
【1】日期和时间的显示:
可以分别使用TextView去实现,注意就是更新日期的handler只需要每分钟更新一次就可以了,过高的刷新频率严重影响手机的电池消耗,我看见有人使用DigitalClock,经过测试耗电量太大,不是一个好办法;
【2】电量和电池状态的显示:
对于电量的更新,需要通过AlarmManager实现定时不间断地发送电池信息
Intent alarmIntent = new Intent();alarmIntent = intent;PendingIntent pendingIntent = PendingIntent.getService(this, 0,alarmIntent, 0);AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);alarm.set(AlarmManager.RTC_WAKEUP, 自己定义一个周期时间, pendingIntent);
然后,自己需要定义1个BroadcastReceiver,
/** 定义一个接收电池信息的broascastReceiver */private BroadcastReceiver batteryReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {currentBatteryLevel = intent.getIntExtra("level", 0);currentBatteryStatus = intent.getIntExtra("status", 0);currentBatteryPlugged=intent.getIntExtra("plugged",0);}};
剩下的,你就可以去找一些根据电量不同数值而对应显示的电池图片
【3】背景图片的切换
我觉得没必要启动一个线程来干这件事情,毕竟以消耗资源少为原则,我是在主activity的onAttachedToWindow()里干这件事情,
APP里默认放了5张图,随机显示就可以了;当然你想扩充以下功能:比如,让用户自己从照片选择图片进行切换也是不错的主义。
【4】一个小锁图片,单击之后,倒计时5秒钟进入锁屏
我看很多“一键锁屏”的软件,都是点击之后马上锁屏,当然我个人还是喜欢进入一个锁屏主体的软件里,让用户更多选择性的功能去用;
这个功能不难,但是需要主意以下几点:
DevicePolicyManager mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
mDPM.lockNow();
就2行代码,真的就可以锁屏了?当然不可以。
ComponentName mLockScreenAdmin = new ComponentName(this, Lock.class);
if (mDPM.isAdminActive(mLockScreenAdmin)) {
mDPM.lockNow();
}
这样子写才可以,Lock必须 extends DeviceAdminReceiver
AndroidMantifest.xml里需要配置Lock这个receiver:
<!-- 锁屏的服务监听,必须要加 --><receiver android:label="Souapp_screenLockManager" android:name=".Lock" android:permission="android.permission.BIND_DEVICE_ADMIN" android:description="@string/about"><meta-data android:name="android.app.device_admin" android:resource="@xml/lock_screen_admin" /><intent-filter><action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /></intent-filter></receiver>
在res/xml目录里需要创建一个lock_screen_admin.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<device-adminxmlns:android="http://schemas.android.com/apk/res/android"><uses-policies><force-lock /></uses-policies>
</device-admin>
【5】向右滑动结束锁屏动画效果,绿色小球向右滑动解锁屏幕
文字的动画效果可以自定义一个View: MaskedTextView,源代码如下:
public class MaskedTextView extends View{private Paint txtPaint;private Shader shader;private float dx=50;private long lastTime = System.currentTimeMillis();private boolean start = false;private void init(){txtPaint = new Paint();txtPaint.setColor(Color.GRAY);txtPaint.setAntiAlias(true);txtPaint.setTextSize(26);shader = new LinearGradient(0, 0, 200, 0, new int[]{Color.argb(255, 120, 120, 120), Color.argb(255, 120, 120, 120), Color.WHITE}, new float[]{0, 0.7f, 1}, TileMode.MIRROR);txtPaint.setShader(shader);}public MaskedTextView(Context context) {super(context);init();}public MaskedTextView(Context context, AttributeSet attrs){super(context, attrs);init();}public void setStart(boolean start) {this.start = start;invalidate();}@Overrideprotected void onDraw(Canvas canvas) {long now = System.currentTimeMillis();float elapsed = (now - lastTime)/4.5f;dx += elapsed;Matrix matrix = new Matrix();if(start){matrix.setTranslate(dx, 0);invalidate();}else{matrix.setTranslate(0, 0);}shader.setLocalMatrix(matrix);canvas.drawText(getContext().getString(R.string.hint_unlock), 0, 25, txtPaint);lastTime = now;}}
关于小球拖动解锁的动画,实际上就是自己写一个SliderRelativeLayout,里面装载小球,解锁框,当按住小球向右边滑动的时候,判断是否到达解锁位置,如果超过了解锁位置就解锁;否则,播放小球返回的动画。
遇到的其它小问题:
【主activity一开始全屏显示,解锁后有notification栏出现】
即使你在oncreate或则onresume方法设置了全屏的flag也不管事,因为我的锁屏屏蔽掉了HOME键
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
在主activity onAttachedToWindow()方法里添加 屏蔽HOME键代码:
this.getWindow().setType( WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
解决办法,只有在屏蔽HOME键之前调用一次设置全屏的flag,完整代码如下:
public void onAttachedToWindow() {// 设置全屏模式getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); updateBackgroundWallper();//更换背景this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);super.onAttachedToWindow();}
Android 关于休眠的几个坑点:可以参考这个文章 http://www.whoslab.me/blog/?p=474
立波教你做安卓一键锁屏软件相关推荐
- 学做安卓一键锁屏应用
这个手机没有自带一键锁屏,在应用商店也没有搜到,下载了几个"锁屏APP"试试发现要许多权限呢,还是自己做一个吧放心点.其他手机应该也能用吧. 打包好的应用下载: https://d ...
- 立波教你做一键清理内存桌面快捷方式动画:图解金山电池医生
大家用户一些一键清理内存的软件,会发现点击桌面上的"快速清理"快捷方式,就会播放一个动画,然后提示你清理了多少内存和进程,看起来挺酷的,不过这样子最大好处让用户减少了2次不必要的操 ...
- 钱盾 Android 恶意软件,【亲爱的、我爱你】一秒害你手机变砖--安卓流氓锁屏软件分析...
1. 以萌与诱惑为名,软件诱导运行 该软件通过使用"萌动"的图片和"诱惑性"的语言,诱导用户进行一步步的点击. 2. 软件运行后,屏蔽所有界面点击操作 运行后, ...
- 160824华为Mate7创建一键锁屏快捷方式
通过电源键锁屏,易导致按键损坏,而下拉栏,又不方便,下第三方程序又过于小题大做,其实,EMUI中是有一键锁屏软件的,可通过ROOT后CUST分区的XML显示隐藏的程序,这里介绍直接调用程序中的子功能, ...
- 【拯救电源键】最详尽的android开发一键锁屏实例 提供免费源码+apk
现在的手机屏幕越来越大,单手操控起来颇为不便,比如锁屏.电源键一般为实体键,经常按难免损耗.所以一键锁屏软件应运而生,既能方便地锁屏,还能减少电源键损耗.甚至许多手机厂商在自家的rom里集成了这个功能 ...
- 笔记本android启动画面,android解锁界面开发分分钟教你做锁屏软件 -电脑资料
想做个锁屏界面很久了,最近一周,历经千辛万苦,越过种种挫折,终于完美实现了这一要求,在此将锁屏思路分享出来, 注意:这不是什么一键锁屏,是类似"go锁屏"那样的锁屏界面. 准备:本 ...
- Android双屏锁屏,教大家vivonex双屏版怎么一键锁屏的方法
最近有挺多人都跟小编说想要了解vivonex双屏版怎么一键锁屏,那么或许你会好奇为什么要了解vivonex双屏版怎么一键锁屏,这里小编就来给大家细细的说道说道,如今很多小伙伴们在玩手机与各种电子设备的 ...
- [安卓应用发布]HOLO一键锁屏
一个极简的一键锁屏应用,holo风格,使用系统默认图标. http://pan.baidu.com/s/1ovOqt 截图: 转载于:https://www.cnblogs.com/zijinzhen ...
- (安卓)一键锁屏 ---亲测!
一键锁屏的实现原理:当按锁屏键的时候,会发出一个广播,当用户界面接收到一个广播的时候就可以实现锁屏.而广播的发送是我们调用DevicePolicyManager(设备管理接收者)中的lockNow() ...
最新文章
- 光学传输与摄像头光学技术
- Kafka0.10.2.0分布式集群安装
- box-shadow比较美观的阴影
- python整数格式显示_[python之路]格式化显示
- nlp自然语言处理_不要被NLP Research淹没
- 以太网帧的最小长度_802.3?以太网?看完你就懂了
- c语言算法基础第一例
- 系统架构师-基础到企业应用架构-业务逻辑层
- DNS服务器配置详解
- 一分钟认识JAVA与Android的联系与区别
- WebLogic 11gR1修改jdk版本
- 开源绘图工具drawio
- MATLAB坐标轴(gca)的简单应用---MATLAB学习
- 2032:【例4.18】分解质因数
- 腾讯高级数据分析师采访2
- 【C#:WinForm+ADO.NET+SQL Server实现验证码登录】
- 将正方形矩阵顺时针转动90度(Java)
- c语言遍历 json字符串,全面详解c语言使用cJSON解析JSON字符
- Spark学习总结以及问题
- IDEA3.5最新版激活码
热门文章
- 随笔--纪录片《Undercover billionaire》随感
- 分享几道VB.net笔试试题
- 帮你开店,提供高性价比门店点餐、门店团购等软件出租,帮你创造财富。
- 2KAX五脚电源芯片,2KAX锂电池充电IC资料
- IPO前“紧急”分红7500万,上市对赌背后,这家功率半导体公司到底有多“硬”?...
- CSS3 Animation 帧动画 steps() --冯浩的博客
- 飞书搜索初步分析-以移动端为例
- 卸载亚信科技安全助手
- 用JS向HTML文本框输入,淘汰赛JS - 双向绑定多个输入(硬编码的HTML输入文本框),并得到JSON阵列...
- 几款工具神器,高效率助你走上人生巅峰