1 package com.android.hzy.mobilesafe.service;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import android.app.ActivityManager;
7 import android.app.ActivityManager.RunningTaskInfo;
8 import android.app.KeyguardManager;
9 import android.app.Service;
10 import android.content.BroadcastReceiver;
11 import android.content.ComponentName;
12 import android.content.Context;
13 import android.content.Intent;
14 import android.content.IntentFilter;
15 import android.database.ContentObserver;
16 import android.net.Uri;
17 import android.os.Binder;
18 import android.os.Handler;
19 import android.os.IBinder;
20 import android.os.SystemClock;
21
22 import com.android.hzy.mobilesafe.MobileSafeApplication;
23 import com.android.hzy.mobilesafe.activity.EnterPasswordActivity;
24 import com.android.hzy.mobilesafe.dao.AppLockDao;
25 import com.android.hzy.mobilesafe.inter.IService;
26 import com.android.hzy.mobilesafe.utils.Logger;
27
28 public class AppLockService extends Service {
29
30 private ActivityManager am;
31 private AppLockDao appLockDao;
32 private List<String> appLocks;
33 private List<String> tempAppLocks; // 放置临时解锁的应用
34 private MyContentObserver observer;
35 // 手机锁屏和解锁的服务
36 private KeyguardManager keyguardManager;
37 private LockScreenReceiver receiver;
38
39 @Override
40 public void onCreate() {
41 // TODO Auto-generated method stub
42 super.onCreate();
43
44 am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
45 keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
46 appLockDao = new AppLockDao(this);
47 appLocks = appLockDao.findAll();
48 tempAppLocks = new ArrayList<String>();
49
50 observer = new MyContentObserver(new Handler());
51 Uri uri = Uri.parse("content://applock/applock");
52 // 注册一个内容观察者
53 getContentResolver().registerContentObserver(uri, true, observer);
54
55 // 注册锁屏广播接收者
56 IntentFilter filter = new IntentFilter();
57 filter.addAction(Intent.ACTION_SCREEN_OFF);
58 receiver = new LockScreenReceiver();
59 registerReceiver(receiver, filter);
60
61 new Thread() {
62 public void run() {
63 // 类似一个看门狗
64 while (true) {
65 // 判断是否锁屏
66 boolean isLockScreen = keyguardManager.inKeyguardRestrictedInputMode();
67 if(isLockScreen){
68 SystemClock.sleep(1000);
69 Logger.i("i", " 现在处于锁屏模式.....");
70 }else{
71 Logger.i("i", " 现在处于监听模式.....");
72 // 得到当前正在运行的任务栈
73 List<RunningTaskInfo> runningTasksInfos = am.getRunningTasks(1);
74 // 得到前台显示的任务栈
75 RunningTaskInfo runningTaskInfo = runningTasksInfos.get(0);
76 //获取栈顶的组件
77 ComponentName component = runningTaskInfo.topActivity;
78 String packageName = component.getPackageName();
79 // 判断当前的应用程序是否在程序锁里面
80 if(appLocks.contains(packageName)){
81 // 判断在不在临时集合中
82 if(!tempAppLocks.contains(packageName)){
83 // 如果在程序锁里面 就将应用的包信息封装到application里面
84 MobileSafeApplication application = (MobileSafeApplication) getApplication();
85 application.setPackname(packageName);
86
87 // 弹出输入密码的界面
88 Intent intent = new Intent(getApplicationContext(),EnterPasswordActivity.class);
89 // 由于服务是不存在任务栈中 因此需要设置FLAG
90 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
91 startActivity(intent);
92 }
93 }
94 }
95 }
96 };
97 }.start();
98 }
99
100 private final class MyContentObserver extends ContentObserver{
101
102 public MyContentObserver(Handler handler) {
103 super(handler);
104 // TODO Auto-generated constructor stub
105 }
106
107 @Override
108 public void onChange(boolean selfChange) {
109 // TODO Auto-generated method stub
110 super.onChange(selfChange);
111 // 重新查询数据
112 appLocks = appLockDao.findAll();
113 // 清除一下临时集合
114 tempAppLocks.clear();
115 }
116
117 }
118
119 /*******锁屏广播************/
120 private final class LockScreenReceiver extends BroadcastReceiver{
121
122 @Override
123 public void onReceive(Context context, Intent intent) {
124 // TODO Auto-generated method stub
125 // 清除一下临时集合
126 tempAppLocks.clear();
127 }
128
129 }
130
131 private MyBinder ibinder = new MyBinder();
132
133 @Override
134 public IBinder onBind(Intent intent) {
135 // TODO Auto-generated method stub
136 return ibinder;
137 }
138
139 private final class MyBinder extends Binder implements IService{
140
141 @Override
142 public void addTemp(String packageName) {
143 // TODO Auto-generated method stub
144 addTempAppLock(packageName);
145 }
146
147 }
148
149 /***********在临时集合中添加应用程序***************************/
150 public void addTempAppLock(String packageName){
151 tempAppLocks.add(packageName);
152 }
153
154 @Override
155 public void onDestroy() {
156 // TODO Auto-generated method stub
157 super.onDestroy();
158 // 取消监听
159 getContentResolver().unregisterContentObserver(observer);
160 // 取消锁屏广播的监听
161 unregisterReceiver(receiver);
162 }
163
164 }