应用锁实现介绍 支持5.0
现在通用的应用锁实现 都是启动一个service一直在后台,判断启动的应用在我们的锁内,就启动我们的锁屏界面。
public class HookService extends Service {public final static String TAG = "TestService";private ActivityManager mActivityManager;private String mLastPackageName = "";@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {super.onCreate();mActivityManager = (ActivityManager) getSystemService("activity");checkWindow();}Handler mHandlertoast = new Handler() {@Overridepublic void handleMessage(Message msg) {LockHelper.getInstance().unLock(HookService.this, null, mLastPackageName);}};private void checkWindow() {new Thread() {@Overridepublic void run() {while (true) {fun();try {Thread.sleep(100);} catch (InterruptedException e) {}}}}.start();}private void fun() {String[] activePackages;if (Build.VERSION.SDK_INT > 20) {activePackages = getActivePackages();} else {activePackages = getActivePackagesCompat();}if (activePackages != null) {for (String activePackage : activePackages) {if (activePackage.equals("com.myth.cici")) {if (!activePackage.equals(mLastPackageName)) {mLastPackageName = activePackage;mHandlertoast.sendEmptyMessage(0);}}}}}String[] getActivePackagesCompat() {final List<ActivityManager.RunningTaskInfo> taskInfo = mActivityManager.getRunningTasks(1);final ComponentName componentName = taskInfo.get(0).topActivity;final String[] activePackages = new String[1];activePackages[0] = componentName.getPackageName();return activePackages;}private String[] getActivePackages() {final Set<String> activePackages = new HashSet<String>();final List<ActivityManager.RunningAppProcessInfo> processInfos = mActivityManager.getRunningAppProcesses();for (ActivityManager.RunningAppProcessInfo processInfo : processInfos) {if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {activePackages.addAll(Arrays.asList(processInfo.pkgList));}}return activePackages.toArray(new String[activePackages.size()]);}
}
5.0以上使用getActivePackages();以下则使用getRunningAppProcesses。
判断获取到的活动的应用包名和我们锁住的包名是否一致,一致则还要判断是否是上次已经解锁了的,防止一直解锁,然后就启动我们的锁屏界面了。
这只是个基本的部分,正式的还需要解决很多问题。比如Service被杀死了怎么办等。
应用锁实现介绍 支持5.0相关推荐
- Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等...
http://blog.51cto.com/13919357/2339446 Java 中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容 ...
- java B锁_Java中15种锁的介绍
原标题:Java中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容如下: 1.公平锁 / 非公平锁 2.可重入锁 / 不可重入锁 3.独享 ...
- Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等
Java 中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容如下: 公平锁 / 非公平锁 可重入锁 / 不可重入锁 独享锁 / 共享锁 互 ...
- Linux--自旋锁(介绍及API简介)
Linux--自旋锁(介绍及API简介) 1.概念 2.自旋锁的使用 2.1.自旋锁 API 函数 2.2.自旋锁的死锁情况 1. 2. 2.1.解决方式 自旋锁使用注意事项 1.概念 何谓自旋锁?它 ...
- mysql锁级别_MySql三种级别锁的介绍及解锁命令
MySql三种级别锁的介绍及解锁命令 (2014-04-29 11:59:37) 标签: 那末 用以 便能 页级的典型代表引擎为BDB. 表级的典型代表引擎为MyISAM,MEMORY和很久之前的IS ...
- Xcode8.1如何支持iOS8.0以下版本
Xcode6.0升级到Xcode8.0,Xcode8.0升级到Xcode8.1时会删除它支持的8.0以后的版本配置文件.老项目要兼容iOS8以下也是可以另辟蹊径的. 虽然手机iOS已经到了10.1.1 ...
- Redis6笔记分享(从NoSQL基础到分布式锁的介绍)
Redis6 1.NoSQL数据库简介 1.1技术发展 题外话:技术的分类 1.解决功能性的问题:Java.Jsp.RDBMS.Tomcat.HTML.Linux.JDBC.SVN 项目的本质无非是增 ...
- 分布式锁的介绍与实现
本篇文章将会剖析分布式锁,以及三种实现分布式锁的方法,包括基于数据库实现.基于缓存(Redis)实现.以及基于Zookeeper实现. 文章目录 1.分布式锁 2. 分布式锁的三种实现方式 2.1 基 ...
- mysql行级锁 表级锁 页级锁详细介绍_MySQL行级锁、表级锁、页级锁详细介绍
页级:引擎 BDB. 表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行 行级:引擎 INNODB , 单独的一行记录加锁 表级,直接锁定整张表,在你锁定期间,其它进程无法对该表进行写 ...
最新文章
- 面试题--特别是字节对齐
- 星际2正在等待暴雪服务器的响应,win7系统玩星际2一直停留在"正在更新暴雪启动器"页面的解决方法...
- C语言 · 分糖果
- [MIPS汇编语言]InsertionSort插入排序
- aix系统32位和64位切换
- pyqt5从子目录加载qrc文件_实战PyQt5: 045-添加资源文件
- 数据中心 48 V 直流供电,Vicor 如何解决“最后一英寸”电源设计难题?
- kindeditor在线html编辑器,kindeditor在线HTML编辑器
- pyCharm-激活码(2018)
- WPS Office Pro 2016 专业版
- 华为IPD 研发模式
- 如何修改w7计算机用户名和密码忘记,w7系统开机密码忘记解决方法_win7忘记密码如何进入系统...
- vs2013 c++小代码运行完了不退出的方法
- mysql建库图解_数据库 MySQL安装图解
- c语言实现学生档案管理系统
- Amazon Redshift - 基本介绍
- 2.整理华子面经--2
- 京东疯狂的JOYS(自动刷硬币/合成)
- 什么是开源?为什么要坚持开源?
- 请问 e^π 和 π^e 哪个大?