程序锁的核心原理(获取正在显示的任务栈)
来源:互联网 发布:淘宝怎么删除评论 编辑:程序博客网 时间:2024/05/10 13:30
package com.android.hzy.mobilesafe.service;
import java.util.ArrayList;
import java.util.List;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
import android.app.KeyguardManager;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Binder;
import android.os.Handler;
import android.os.IBinder;
import android.os.SystemClock;
import com.android.hzy.mobilesafe.MobileSafeApplication;
import com.android.hzy.mobilesafe.activity.EnterPasswordActivity;
import com.android.hzy.mobilesafe.dao.AppLockDao;
import com.android.hzy.mobilesafe.inter.IService;
import com.android.hzy.mobilesafe.utils.Logger;
public class AppLockService extends Service {
private ActivityManager am;
private AppLockDao appLockDao;
private List<String> appLocks;
private List<String> tempAppLocks; // 放置临时解锁的应用
private MyContentObserver observer;
// 手机锁屏和解锁的服务
private KeyguardManager keyguardManager;
private LockScreenReceiver receiver;
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
appLockDao = new AppLockDao(this);
appLocks = appLockDao.findAll();
tempAppLocks = new ArrayList<String>();
observer = new MyContentObserver(new Handler());
Uri uri = Uri.parse("content://applock/applock");
// 注册一个内容观察者
getContentResolver().registerContentObserver(uri, true, observer);
// 注册锁屏广播接收者
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_OFF);
receiver = new LockScreenReceiver();
registerReceiver(receiver, filter);
new Thread() {
public void run() {
// 类似一个看门狗
while (true) {
// 判断是否锁屏
boolean isLockScreen = keyguardManager.inKeyguardRestrictedInputMode();
if(isLockScreen){
SystemClock.sleep(1000);
Logger.i("i", " 现在处于锁屏模式.....");
}else{
Logger.i("i", " 现在处于监听模式.....");
// 得到当前正在运行的任务栈
List<RunningTaskInfo> runningTasksInfos = am.getRunningTasks(1);
// 得到前台显示的任务栈
RunningTaskInfo runningTaskInfo = runningTasksInfos.get(0);
//获取栈顶的组件
ComponentName component = runningTaskInfo.topActivity;
String packageName = component.getPackageName();
// 判断当前的应用程序是否在程序锁里面
if(appLocks.contains(packageName)){
// 判断在不在临时集合中
if(!tempAppLocks.contains(packageName)){
// 如果在程序锁里面 就将应用的包信息封装到application里面
MobileSafeApplication application = (MobileSafeApplication) getApplication();
application.setPackname(packageName);
// 弹出输入密码的界面
Intent intent = new Intent(getApplicationContext(),EnterPasswordActivity.class);
// 由于服务是不存在任务栈中 因此需要设置FLAG
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}
}
}
};
}.start();
}
private final class MyContentObserver extends ContentObserver{
public MyContentObserver(Handler handler) {
super(handler);
// TODO Auto-generated constructor stub
}
@Override
public void onChange(boolean selfChange) {
// TODO Auto-generated method stub
super.onChange(selfChange);
// 重新查询数据
appLocks = appLockDao.findAll();
// 清除一下临时集合
tempAppLocks.clear();
}
}
/*******锁屏广播************/
private final class LockScreenReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
// 清除一下临时集合
tempAppLocks.clear();
}
}
private MyBinder ibinder = new MyBinder();
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return ibinder;
}
private final class MyBinder extends Binder implements IService{
@Override
public void addTemp(String packageName) {
// TODO Auto-generated method stub
addTempAppLock(packageName);
}
}
/***********在临时集合中添加应用程序***************************/
public void addTempAppLock(String packageName){
tempAppLocks.add(packageName);
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
// 取消监听
getContentResolver().unregisterContentObserver(observer);
// 取消锁屏广播的监听
unregisterReceiver(receiver);
}
}
import java.util.ArrayList;
import java.util.List;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
import android.app.KeyguardManager;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Binder;
import android.os.Handler;
import android.os.IBinder;
import android.os.SystemClock;
import com.android.hzy.mobilesafe.MobileSafeApplication;
import com.android.hzy.mobilesafe.activity.EnterPasswordActivity;
import com.android.hzy.mobilesafe.dao.AppLockDao;
import com.android.hzy.mobilesafe.inter.IService;
import com.android.hzy.mobilesafe.utils.Logger;
public class AppLockService extends Service {
private ActivityManager am;
private AppLockDao appLockDao;
private List<String> appLocks;
private List<String> tempAppLocks; // 放置临时解锁的应用
private MyContentObserver observer;
// 手机锁屏和解锁的服务
private KeyguardManager keyguardManager;
private LockScreenReceiver receiver;
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
appLockDao = new AppLockDao(this);
appLocks = appLockDao.findAll();
tempAppLocks = new ArrayList<String>();
observer = new MyContentObserver(new Handler());
Uri uri = Uri.parse("content://applock/applock");
// 注册一个内容观察者
getContentResolver().registerContentObserver(uri, true, observer);
// 注册锁屏广播接收者
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_OFF);
receiver = new LockScreenReceiver();
registerReceiver(receiver, filter);
new Thread() {
public void run() {
// 类似一个看门狗
while (true) {
// 判断是否锁屏
boolean isLockScreen = keyguardManager.inKeyguardRestrictedInputMode();
if(isLockScreen){
SystemClock.sleep(1000);
Logger.i("i", " 现在处于锁屏模式.....");
}else{
Logger.i("i", " 现在处于监听模式.....");
// 得到当前正在运行的任务栈
List<RunningTaskInfo> runningTasksInfos = am.getRunningTasks(1);
// 得到前台显示的任务栈
RunningTaskInfo runningTaskInfo = runningTasksInfos.get(0);
//获取栈顶的组件
ComponentName component = runningTaskInfo.topActivity;
String packageName = component.getPackageName();
// 判断当前的应用程序是否在程序锁里面
if(appLocks.contains(packageName)){
// 判断在不在临时集合中
if(!tempAppLocks.contains(packageName)){
// 如果在程序锁里面 就将应用的包信息封装到application里面
MobileSafeApplication application = (MobileSafeApplication) getApplication();
application.setPackname(packageName);
// 弹出输入密码的界面
Intent intent = new Intent(getApplicationContext(),EnterPasswordActivity.class);
// 由于服务是不存在任务栈中 因此需要设置FLAG
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}
}
}
};
}.start();
}
private final class MyContentObserver extends ContentObserver{
public MyContentObserver(Handler handler) {
super(handler);
// TODO Auto-generated constructor stub
}
@Override
public void onChange(boolean selfChange) {
// TODO Auto-generated method stub
super.onChange(selfChange);
// 重新查询数据
appLocks = appLockDao.findAll();
// 清除一下临时集合
tempAppLocks.clear();
}
}
/*******锁屏广播************/
private final class LockScreenReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
// 清除一下临时集合
tempAppLocks.clear();
}
}
private MyBinder ibinder = new MyBinder();
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return ibinder;
}
private final class MyBinder extends Binder implements IService{
@Override
public void addTemp(String packageName) {
// TODO Auto-generated method stub
addTempAppLock(packageName);
}
}
/***********在临时集合中添加应用程序***************************/
public void addTempAppLock(String packageName){
tempAppLocks.add(packageName);
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
// 取消监听
getContentResolver().unregisterContentObserver(observer);
// 取消锁屏广播的监听
unregisterReceiver(receiver);
}
}
- 程序锁的核心原理(获取正在显示的任务栈)
- 如何获取正在运行任务的列表
- 如何获取正在运行任务的列表?
- quartz 获取正在执行的任务
- 获取屏幕上正在显示的activity
- 获取屏幕上正在显示的activity
- 获取正在显示的activity名称
- 获取屏幕上正在显示的activity
- iOS 获取当前正在显示的ViewController
- iOS 获取当前正在显示的ViewController
- iOS 获取当前正在显示的ViewController
- 获取当前AppDelegate 正在显示的UIViewController
- ios-获取当前正在显示的ViewController
- iOS 获取当前正在显示的ViewController
- iOS 获取当前正在显示的ViewController
- iOS 获取当前正在显示的ViewController
- iOS 获取当前正在显示的ViewController
- iOS 获取当前正在显示的ViewController
- POJ 3740 DLX
- wince中显示BMP、JPG、Gif以及PNG的方法
- ANDROID ListView 下拉过后自动更新
- 获得嵌套repeater里的控件
- note : Get FilePathName from FILE_OBJECT
- 程序锁的核心原理(获取正在显示的任务栈)
- 如何将JSP跨iframe传递参数
- Nexenta Appliance Tuning
- Linux下通过Pro*C语言访问Oracle(一)
- c++primer 学习 第一章
- 移植FreeModbus+ModbusMaster(主机)+STM32至RT-Thread(3、4阶段)
- 11
- android root权限破解分析
- HDU4738【杭州网赛、判桥】