android 屏蔽指定activity启动(程序锁)


  某些安全管理类具有程序锁功能,大致功能是这样的:安全管理程序列出系统中的所有应用,用户选定一些想锁定的程序,并设置好密码,这样以后,再运行那些程序会跳转到一个权限页面,要求输入密码访问,或者不访问并推出。


  如何实现呢?

  第一个想法就是写一个service监测activity 栈,如果栈顶有更改,则判断其是否为受保护的程序,是,就intent转向自己定义的认证授权activity;否,则什么都不做。

找来找去,sdk没有提供某个回调方法或事件、广播之类的api,只能自己一直while中检测。

  于是寻找第二种方法,在源码中找所有service和aidl,也没发现callback或者broadcast,activitymanager除了更改源码,无法在外部让它具有此类功能。

  native层?暂不考虑。


现在把示例代码写出来,谁知道不用while的方式去检测activity栈顶情况的方法,请告诉我,谢了。


service 中的代码:

@Override
publicvoid onStart(Intent intent, int startId) {
super.onStart(intent, startId);

//我们将通过activity管理服务获得当前activity栈的内容
final ActivityManager am=(ActivityManager)getSystemService(ACTIVITY_SERVICE);

//这个intent可以写死,因为一直都是转向这个
final Intent mintent=new Intent();
//flag必须是new task,仔细想想service与activity的区别就明白了。
mintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

//这个不用说了
mintent.setClass(getApplicationContext(),LockActivity.class);

//一个线程,让我一直检测
AsyncTask taskWatcher=new AsyncTask() {

@Override
protected Object doInBackground(Object... params) {

//把这个while当成看门狗吧。
while(true){

/我们只需要获得1个RunningTasks,一般情况下,会从栈顶按照传入的个数来获取
一个集合,总有一个activity的,不会报空的请放心
/
String name=am.getRunningTasks(1).get(0).topActivity.getPackageName();

/
判断当前activity的包是否是属于受保护的
当然,实际情况下是读取数据什么的,获取一个集合
这个集合通常是提前列出系统所有安装的apk包,并让用户选择所得到的
/
if(pakageName.equals(name)){

/**转向目标意图,自己制定
* 可以列个输入框输密码什么的。
*
* 在目标activity,要屏蔽返回键,因为返回上一个task的栈顶,则
* 又会返回到这里,写代码又要跑一边,无意义,如果如输入密码对了
* 则finish验证activity,会自动返回到用户期望的activity。
*
* 验证的策略,与通过验证的实效期,按照自己的需求来制定即刻
*/
startActivity(mintent);
}

try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}
};

taskWatcher.execute(null);

}


仅当抛砖引玉,如有不对,望请指正。


更多相关文章

  1. Android和java平台 DES加密解密互通程序及其不能互通的原因
  2. 【Android每日一讲】2012.11.08 Android(安卓)多语系支持 -- Loc
  3. sms AT指令返回错误代码: CMS errors & CME errors 的区别!
  4. Android里面如何编写退出主程序的提示代码
  5. Android(安卓)Native 程序逆向入门(一)—— Native 程序的启动流程
  6. 一起来学android开发之一——写给初学android的同学们
  7. Android模拟器常用操作
  8. pAdTy_-5 保存数据
  9. Android判断、创建和删除快捷方式

随机推荐

  1. Android(安卓)屏幕截图并用WindowManager
  2. Android(安卓)M5 新特性
  3. 通过判断浏览器的userAgent,用正则来判断
  4. 简单说明View
  5. Android(安卓)UI开发点点滴滴(基本控件)
  6. Android(安卓)开发中的日常积累
  7. 线程安全
  8. Android(安卓)面试题7
  9. android 入口activity
  10. android EditText 隐藏软键盘(输入法不显