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 }