Android利用手势完成屏幕密码锁功能

作者:vemitriq 时间:2023-04-08 21:21:40 

本文实例为大家分享了Android画笔屏幕锁小程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

1.如果使用GestureOverlayView,在xml配置文件中使用Android.gesture.GestureOverlayView,否则会报ClassNotFoundException

2.关于判断MEDIA_MOUNTED,API的解释:getExternalStorageState() returns MEDIA_MOUNTED if the media ispresent and mounted at its mount point with read/write access.

3.使用了service和broadcastReciever进行监听,监测到屏幕亮暗进行程序启动,参考了文章:

4.关于android.intent.action.MAIN

决定应用程序最先启动的Activity
android.intent.category.LAUNCHER

决定应用程序是否显示在程序列表里

5.关于R.id的问题,将要import类R所在的包

6.利用了Android SDK范例开发中的GestureOverlayView进行开发画图工具

7.实现了在service中启动activity


Intent i = new Intent(UpdateService.this,Lock.class);
  i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  this.startActivity(i);

8. 隐藏界面


this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
Don't call setContentView() before requestFeature().

9.全屏并屏蔽HOME键,以及屏蔽返回键,完成办法。


public booleanonKeyDown(int keyCode,KeyEvent event){
switch(keyCode){
caseKeyEvent.KEYCODE_HOME:return true;
caseKeyEvent.KEYCODE_BACK:return true;
caseKeyEvent.KEYCODE_CALL:return true;
caseKeyEvent.KEYCODE_SYM: return true;
caseKeyEvent.KEYCODE_VOLUME_DOWN: return true;
caseKeyEvent.KEYCODE_VOLUME_UP: return true;
caseKeyEvent.KEYCODE_STAR: return true;
}
returnsuper.onKeyDown(keyCode, event);
}

屏蔽home键的代码:


public voidonAttachedToWindow() {
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
}

出现问题:WindowManager.LayoutParams.TYPE_KEYGUARD以及LayoutParams.FLAG_FULLSCREEN出现冲突,无法解决,搜索网上无解决办法。

参考文档:
 \frameworks\policies\base\phone\com\android\internal\policy\impl\PhoneWindowManager.java1089行


if (code ==KeyEvent.KEYCODE_HOME) {

// If a system window has focus,then it doesn't make sense
 // right now to interact withapplications.
 WindowManager.LayoutParams attrs =win != null ? win.getAttrs() : null;
 if (attrs != null) {
 final int type = attrs.type;
 if (type ==WindowManager.LayoutParams.TYPE_KEYGUARD
  || type ==WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG) {
  // the "app" iskeyguard, so give it the key
  return false;
 }
 final int typeCount =WINDOW_TYPES_WHERE_HOME_DOESNT_WORK.length;
 for (int i=0; i<typeCount;i++) {
  if (type ==WINDOW_TYPES_WHERE_HOME_DOESNT_WORK[i]) {
  // don't do anything,but also don't pass it to the app
  return true;
  }
 }
 }

因此解决问题! 

10.出现了返回HOME页后重新从程序页进入,发现又进入开锁界面:

经过查询思考,发现,其实是HOME页后将程序放入处理栈当中,所以重新进入时就会继续回到栈顶,并且破坏了全屏效果。

因此必须实现返回键功能,而不是HOME键。

因此,使用finish();方法就足够了, * SDK开发,竟然写了一个外部监听,不能使用finish方法,后来改写成内部类,直接搞定。

根据个人感觉,其实监听写内部类还是比较保险的,开发初级阶段,慢慢摸索。
newGestureOverlayView.OnGesturePerformedListener() 

最后,上效果图,4天的结果,还不错。起码解决了全屏显示和屏蔽HOME键的问题。

PS:将会对来电开锁功能进行更新

上图:

Android利用手势完成屏幕密码锁功能

Android利用手势完成屏幕密码锁功能

Android利用手势完成屏幕密码锁功能

更多内容请参考专题:Android密码使用教程

标签:Android,手势密码,屏幕锁
0
投稿

猜你喜欢

  • Java 实战项目锤炼之医院门诊收费管理系统的实现流程

    2022-08-10 11:35:08
  • 详解java中各类锁的机制

    2022-08-01 06:48:56
  • JAVA并发中VOLATILE关键字的神奇之处详解

    2021-08-15 01:51:38
  • maven环境变量配置讲解

    2023-11-29 12:35:51
  • JDBC连接mysql乱码异常问题处理总结

    2023-11-06 14:57:27
  • C#实现快速排序算法

    2023-03-20 08:41:51
  • 学习使用Material Design控件(一)

    2023-07-27 13:14:06
  • java日期格式化SimpleDateFormat的使用详解

    2023-08-25 03:22:15
  • Java 判断一个时间是否在另一个时间段内

    2023-02-24 18:44:25
  • UnityWebRequest前后端交互实现过程解析

    2021-09-07 01:24:42
  • 分享Spring Cloud OpenFeign 的五个优化技巧

    2022-06-23 08:53:30
  • Android 使用Shell脚本截屏并自动传到电脑上

    2022-07-06 01:21:43
  • 基于web项目log日志指定输出文件位置配置方法

    2021-10-04 09:25:27
  • C#利用子线程刷新主线程分享教程

    2023-05-16 13:25:46
  • 解决从Map、JSONObject取不存在键值对时的异常情况

    2023-05-08 03:18:27
  • Java中final与继承操作实例分析

    2023-09-14 08:56:02
  • Android在线更新SDK的方法(使用国内镜像)

    2022-08-31 02:40:31
  • Java中JDBC连接数据库详解

    2023-08-10 16:57:18
  • Java NIO实现聊天功能

    2022-06-12 08:31:31
  • AjaxControlToolkit AjaxFileUpload 显示英文改成中文的解决方法

    2021-06-01 21:09:57
  • asp之家 软件编程 m.aspxhome.com