- 如我们所知,现在有很多牛逼的安全软件都带有程序锁的功能。当然,名字可能不一样,有的叫隐私保护,有的叫软件锁。等等。但是这种名字其实都是表达一种意思,就是可以给你手机里面的app加以保护。只有你给你的App设置了程序锁,这样每次在你进入这个App的时候就要先输入密码,然后才能进入。
- 程序锁功能并不是什么高大上的技术,也不是很难的技术点。于是,受到灰驹的启发,我就写了一个简单的,UI比较丑陋的程序锁的小Demo。
-
国际惯例:先分析一下做一个程序锁功能所涉及到的知识点:
- 组建的使用。
- 组建的使用(当然,这个不是必须的,在实现这个功能上)。
- 启动模式的了解。
- 的APi使用。
- 的API的使用。
- 数据库的使用。(这个也不是必须的)
- 的API的使用。(有些手机不主动打开软键盘,就需要使用这个类)
-
OK,介绍就这些了,下面是代码区:
- 关于UI方面,简单说明一下,里面就一个主,作用就是让用户选择添加需要加锁的应用,进行加锁操作。然后就是一个弹出让用户给加锁的应用输入密码的。在用户点击要打开已经加锁的应用时候弹出。
- 首先是xml代码:
- 的布局:
- xml布局就没有了。
- 需要注意一下,程序锁功能里面需要添加的权限:
- 然后是Java代码:
- 首先是程序的
- 然后是
package com.duck.husband;import java.util.List;import android.app.ActivityManager;import android.app.ActivityManager.RunningTaskInfo;import android.app.IntentService;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.SystemClock;public class WatchDogService extends IntentService { private static final boolean DEBUG = false; private static final String COM_DUCK_HUSBAND_UNCHECKED = "com.duck.husband.UNCHECKED"; private Context context; private WatchDogDao watchDogDao; private String unCheckedPackageName; private UnCheckedReceiver receiver; public WatchDogService() {super("abcde");context = this;watchDogDao = new WatchDogDao(context); } @Override public void onCreate() {super.onCreate();receiver = new UnCheckedReceiver();IntentFilter filter = new IntentFilter();filter.addAction(COM_DUCK_HUSBAND_UNCHECKED);filter.addAction(Intent.ACTION_SCREEN_OFF);registerReceiver(receiver, filter); } @Override protected void onHandleIntent(Intent intent) {while (true) { ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); List runningTasks = am.getRunningTasks(99); String packageName = runningTasks.get(0).topActivity.getPackageName(); // 获取最近打开的App包名 boolean b = watchDogDao.query(packageName); if (b) { // 说明是加锁的程序 if (packageName.equals(unCheckedPackageName)) { } else {Intent intent2 = new Intent(context, LockActivity.class);intent2.putExtra("packageName", packageName);// TODO:这一行不加,就没有办法去临时取消保护了!!!intent2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(intent2); } } else { } if (DEBUG) { System.out.println("packageName 0:" + packageName); } SystemClock.sleep(300);} } @Override public void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();if (receiver != null) { unregisterReceiver(receiver);
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!