程序锁

@Override
public void 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);


}

你可能感兴趣的:(程序锁)