Android-图形解锁

在项目中为了安全考虑需要加入图形解锁这一功能,经过搜集各方面资料后完成了开发, 需求简单描述下(省略开启及关闭、重置、忘记的需求)

1.应用在打开或置于后台运行时手机锁屏后重新唤起应用时需输入图形解锁

2.应用置于后台或跳转至第三方应用超过30s后再返回应用界面时需输入图形解锁

在自定义的application中定义一个记录时间的long型变量(hideTime),用来记录时间,在自定义的基类activity中控制图形解锁(UnlockActivity)的出现,代码如下

 1     @Override
 2     protected void onStart() {
 3         // TODO Auto-generated method stub
 4         super.onStart();
 5         long resumeTime = System.currentTimeMillis();
 6         if (resumeTime - mApplication.hideTime > 30000) {
 7             sendBroadcast(new Intent(StaticUtil.LOCK_ACTIVITY));
 8         }
 9     }
10
11     @Override
12     protected void onResume() {
13         // TODO Auto-generated method stub
14         super.onResume();
15         IntentFilter intentFilter = new IntentFilter();
16         intentFilter.addAction(StaticUtil.FINISH_ACTIVITY);
17         intentFilter.addAction(StaticUtil.LOCK_ACTIVITY);
18         intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
19         registerReceiver(reciver, intentFilter);
20
21     }
22
23     @Override
24     protected void onPause() {
25         // TODO Auto-generated method stub
26         super.onPause();
27         mApplication.hideTime = System.currentTimeMillis();
28     }
29
30     @Override
31     protected void onStop() {
32         // TODO Auto-generated method stub
33         super.onStop();
34         mApplication.hideTime = System.currentTimeMillis();
35     }
36
37     @Override
38     protected void onDestroy() {
39         unregisterReceiver(reciver);
40         super.onDestroy();
41     }

打开UnlockActivity的控制则放入自定义的广播接收器中,action自定义为StaticUtil.LOCK_ACTIVITY,同时,开启对锁屏(ACTION_SCREEN_OFF)的广播接收,经过试验发现在

锁屏时首先进入的是onPause 然后再接收到广播,中间的时间差不超过1s,所以在这里进行了如下的判断,如果锁屏的时间减去activity进入onPause 的时间超过1s则可以认为用户是

先将应用置于后台再执行的锁屏,反之则是在应用正在运行的过程中锁屏。这里不直接在锁屏时打开UnlockActivity是因为在某些机器上(如mi2、努比亚z5s等)会发生只要用户解锁屏幕

应用的UnlockActivity总是被启动的bug,而其他一些机型则不会(如华为荣耀3c,三星s4等)

 1 public class LotteryBroadcastReciver extends BroadcastReceiver {
 2         @Override
 3         public void onReceive(Context context, Intent intent) {
 4             // TODO Auto-generated method stub
 5             String action = intent.getAction();
 6             if (action.equals(StaticUtil.FINISH_ACTIVITY)) {
 7                 finish();
 8             } else if (action.equals(StaticUtil.LOCK_ACTIVITY)) {
 9                 if (mApplication.mLockPatternUtils.savedPatternExists()) {
10                     Intent lockIntent = new Intent(LotteryActivity.this,
11                             UnlockActivity.class);
12                     lockIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
13                             | Intent.FLAG_ACTIVITY_NEW_TASK);
14                     startActivity(lockIntent);
15                 }
16             } else if (action.equals(Intent.ACTION_SCREEN_OFF)) {
17                 long resumeTime = System.currentTimeMillis();
18                 if (resumeTime - mApplication.hideTime < 1000) {
19                     sendBroadcast(new Intent(StaticUtil.LOCK_ACTIVITY));
20                 } else {
21                     mApplication.hideTime -= 30000;
22                 }
23             }
24         }
25     }

最后,在UnlockActivity完成正确的解锁过程后执行finish()方法并刷新隐藏时间(hideTime)即可,而为了防止应用自身activity的打开造成进入onPause、onStop出现锁屏的情况,重写了用户点击back键、onActivityResult、finish等方法,在里面对隐藏时间(hideTime)进行了刷新

UnlockActivity是参考了 http://blog.csdn.net/vrix/article/details/39003433 只针对业务做了微小调整。

时间: 2024-11-02 23:22:58

Android-图形解锁的相关文章

老二牛车Axure夜话:Axure手机原型视频教程之图形解锁

老二牛车Axure夜话:Axure手机原型视频教程之图形解锁 案例描述:图形解锁 知识点: 鼠标拖动 字符串 光标操作 效果图: 本站在线效果预览:http://www.91axure.com/phonelesson/imglock/start.html#p=home(firefox原型文件) AxShare在线效果预览: 原型下载地址:图形解锁.rp 在线视频: 实现步骤: 更新中…..

IOS仿Android九宫格解锁效果[转]

原理很简单,监听view中touch的一系列事件,当判定手指位置在某个按钮附近的时候则判断此按钮选中,并画出线. 效果图如下: 你可以在NineGridUnlockView.m文件中方法 touchesEnded:withEvent: 的最后添加自己的代码来决定画线完成后来做什么. (当前工程还没有加入委托,后续可能加上) 代码地址: https://github.com/lcwangchao/NineGridUnlocker IOS仿Android九宫格解锁效果[转]

深入了解Android图形管道-part2

深入了解Android Graphics Pipeline-part-2 > * 原文链接 : Android Graphics Pipeline: From Button to Framebuffer (Part 2) * 作者 : Mathias Garbe * 译者 : chaossss * 校对者: Mr.Simple * 状态 : 完成 在上一篇博文中,我们图文结合介绍了 Android 怎么把 onDraw() 方法的 Java 代码转换为 Native 层的 C/C++ 代码.而今

Android图形图像使用总结

一.图形特效 (一)特效的实现方式 在Android中,提供了3种方式实现特效,setXXX方法,postXXX和preXXX()方法. 1.setXXX方法用于直接设置Matrix的值,每使用一次setXXX()方法,整个的Matrix都会变掉. 2.postXXX方法用于采用后乘的方式为Matrix设置值,可以连续多次使用post完成多个变换 3.preXXX方法用于采用前乘的方式为Matrix设置值,使用preXXX方法的设置操作最先发生. (二)特效的表现形式 1.旋转:setRotat

Android 图形状态组合的应用 (笔记 )

目的:创建按钮,当按钮使按钮有不同的形状状态     在res下drawable-hdpi保存按钮初始状态left.png和按钮按下后的状态图片rigth.png.          将图片文件拖到创建好的文件夹drawable-hdpi中          创建一个一般的XML文件,新建图形状态组合步骤为     drawable_change → New → Other... → XML → XML File           注意:将Left_Rigth.XML 改成 left_righ

Android图形之PathEffect类

1.PathEffect API示例给出了如何应用每一种效果的指导说明.到目前为止,所有的效应都会影响到Paint填充图像的方式:PathEffect是用来控制绘制轮廓(线条)的方式. PathEffect对于绘制Path基本图形特别有用,但是它们也可以应用到任何Paint中从而影响线条绘制的方式. 使用PathEffect,可以改变一个形状的边角的外观并且控制轮廓的外表.Android包含了多个PathEffect,包括: CornerPathEffect  可以使用圆角来代替尖锐的角从而对基

Android手势解锁

给大家介绍一个很好用的第三方手势解锁控件ShapleLocker, 废话不多先上效果图: 可自己根据UI需求替换图标: 圆圈, 小箭头等等.. github地址: http://panespanes.github.io/ShapeLocker/ 用法很简单, 首先在gradle中添加依赖: 在项目(project, 不是module)的build.gradle中, respositories的最后加上一行引用jitpack的maven仓库地址 allprojects { repositories

Android 图形与硬件加速

今天在研究Android-PullToRefresh的时候,突然发现 清单文件中有这么一句 android:hardwareAccelerated="true".以前没有见过,果断百度,发现原来是与硬件加速有关,参见google开发者文档>   说是从Android3.0 开始 ,Android的2D 管道线就被设计成支持硬件加速的了.硬加速使用GPU承担了所有在View的canvas上执行的绘制操作.同时这样的应用也会消耗更多的内存.   启用硬加速最简单的的方法是对整个应用启

Android 图形总结

1.9patch图 2.按钮自定义 1 <?xml version="1.0" encoding="utf-8"?> 2 <shape xmlns:android="http://schemas.android.com/apk/res/android"> 3 <!--尺寸--> 4 <size android:height="20dp" android:width="310d

Android图形动画基础

一.动画基础 本质 每帧绘制不同的内容. 基本过程 开始动画后,调用View的invalidate触发重绘.重绘后检查动画是否停止,若未停止则继续调用invalidate触发下一帧(下一次重绘),直到动画结束. 重绘时View的draw方法会被调用,根据动画的进行绘制不同的内容,如某个被绘制元素的大小变化.角度旋转.透明度变化等,这样即会产生动画. 动画的推进过程一般都会有一个变化量,这个变量会被用到draw方法内元素的绘制.一般的变量都是时间,也可以是手指移动.传感器等任何其他的变量. And