长点击事件,程序加密,长按Home键不显示记录

来源:互联网 发布:哈萨克族dombira软件 编辑:程序博客网 时间:2024/04/28 03:42

51.长点击事件

点击或者触摸事件方法的返回值,意义都是一样的:

如果方法返回true,代表事件到这儿就消费掉了、终止掉了;如果是false,代表事件到这儿没有处理完。

如果长点击事件返回值设为false,则点击事件也会响应,为了区别开点击事件和长点击事件的不同响应,可以把长点击事件的返回值设为true。


52.程序加密

写一个看门狗服务,不停的监视当前手机里面运行的应用程序信息。只要发现应用程序加密,就弹出输入密码的界面。为了能够不停的监视用户的操作,要把下面代码放到线程里面的while(true)方法中。所有应用的看门狗服务都是在while(true)方法中的。

创建看门狗服务时,一般设置一个flag,在开启服务时设置flag为true,停止服务时flag为false。while(true)改为while(flag)。锁屏时就没必要继续开启看门狗服务了,所以设置个flag有助于省电。

首先,用am可以获得正在运行的任务栈

List<RunningTaskInfo> infos = am.getRunningTasks(1);

获得任务栈需要添加权限:GET_TASKS

参数是返回的最大个数。程序加密只判断当前用户所操作的任务栈,所以返回一个就可以了。返回的是当前正在运行的任务栈的列表。最近使用的任务栈在列表的最前面。

然后,用get(0)获得列表的第一个任务栈,即当前用户操作的任务栈,再获得任务栈的栈顶Activity,再获得该Activity所在的包名。也就是当前用户所操作应用程序的包名。

String packname = infos.get(0).topActivity.getPackageName();

得到包名后,判断该包名是否在数据库中,如果在数据库中说明已经加密,弹出输入密码的界面。

可以在设置界面中增加开启停止看门狗服务的设置,也可以写广播监听解屏、锁屏来开启和停止服务

服务和广播是没有任务栈信息的,在服务或广播中开启Activity,要指定这个Activity运行的任务栈

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

程序内或不同程序之间的通信可以用自定义广播实现,并且自定义广播用的非常多。如输入密码正确时,通知服务暂停保护该应用程序,否则会一直弹出输入密码框。

输入密码的Activity不能放在手机安全卫士的任务栈里,这样会导致界面混乱,所以输入密码的Activity应该设置为单一实例的启动模式


53.长按Home键不显示记录

有些应用为了保护用户的隐私,在长按Home键时,用户不想让自己玩过的界面显示出来,或者有些界面没必要显示在最近任务列表中,如输入密码的Activity。此时可以在清单文件的相应activity节点下声明:

android:excludeFromRecents="true"

有些特殊的Activity,如:广告平台。不想让它在最近任务列表中显示任何信息的话,都可以做上述设置。

0 0
原创粉丝点击