1.程序功能介绍

本程序实现对特定应用的监听,当特定应用前台运行时,立刻弹出本程序锁应用界面,用户输入正确密码后,才能转到特定应用继续使用,用户点击后退按钮无效,点击home键后,再启动被锁应用后,仍然调用输入密码界面。

2.关键知识点

定时器timer的使用,查看当前运行程序getRunningAppProcesses()的使用,程序前后台转换moveTaskToFront()  、moveTaskToBack()的使用,监听点击home键onUserLeaveHint()的重写使用,重写onKeyDown()等。

3.程序实现

3.1定时器实现

用timer实现定时查看当前前台运行程序,如果是“微信”(本程序使用微信做例子),而且用户没有通过输入密码进入微信,则调用LockActivity.class,也就是写好的程序输入密码界面,并将本程序在前台显示,如果不加前台显示的代码,程序就不会弹出在屏幕上了……,具体代码如下:
public class TimerServer {boolean clock;
    public void timer(final Context context, boolean clock1){//clock为程序锁标志位,true为启用程序锁功能,false为禁用程序锁功能,
        //当用户已经输入密码,进入被锁程序后,程序锁标志位为false;其他情况为true
        clock=clock1;

        Timer timer=new Timer();
        final TimerTask timerTask=new TimerTask() {@Override
            public void run() {ActivityManager myActivityManager= (ActivityManager) context.getSystemService(context.ACTIVITY_SERVICE);
                List<ActivityManager.RunningAppProcessInfo> list=myActivityManager.getRunningAppProcesses();
                List<ActivityManager.RunningTaskInfo> list_task=myActivityManager.getRunningTasks(100);
                //如果当前前台运行程序不是微信,则给微信加锁。
                if (!list.get(0).processName.equals("com.tencent.mm")){clock=true;
                }//若当前运行程序为“微信”,且用户未通过输入密码界面确认,则调用程序锁界面。
                    if (list.get(0).processName.equals("com.tencent.mm")&&clock==true){//遍历当前运行task,找到本程序所在task,移至前台。
                    for (ActivityManager.RunningTaskInfo i:list_task) {if (i.topActivity.getPackageName().equals(context.getPackageName()))                        {myActivityManager.moveTaskToFront(i.id,0);
                        }}//调用程序锁界面。
                    Intent intent=new Intent();
                    intent.setClass(context,LockActivity.class);
                     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    context.startActivity(intent);
                    this.cancel();
                }Log.i("processName", list.get(0).processName);
            }};
        timer.schedule(timerTask,0,4*1000);//4s查看一次
    }
}

在MainActiv中调用该类方法,如下,其中activity.main中可以写些提示“按返回键让本程序后台运行”之类的提示:

public class MainActivity extends AppCompatActivity {@Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new TimerServer().timer(this,true);
    }
}

3.2程序输入密码界面及相关屏蔽后退按钮、监听home按钮的实现

当微信运行在前台且用户未通过输入密码界面进入微信,则此类被调用。为确保程序严谨,防止用户通过未知方法跳过输入密码的方式进入微信,此类中仍需不断判断当前当前前台运行程序是否为微信,且程序锁标志位为true,若是微信且标志位为true,则重新弹出本输入密码界面。其他屏蔽后退键等实现方法在代码中有注释,不在赘述,代码如下:
public class LockActivity extends Activity{String edittext="";
    EditText editText1;
    //程序锁标志位,true为启用程序锁功能,false为禁用程序锁功能,
    //当用户已经输入密码,进入被锁程序后,程序锁标志位为false;其他情况为true
    boolean clock=true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lock);
        //输入密码框:
        editText1=(EditText) findViewById(R.id.editText1);
        //提交密码按钮
        Button button1=(Button)findViewById(R.id.button1);
        button1.setOnClickListener(new View.OnClickListener() {@Override
            public void onClick(View view) {//点击按钮后,获取输入
                edittext=editText1.getText().toString();
                if (edittext.equals("123")){//接收到正确密码后,清除输入框,防止下次调用本页面时泄露密码。

                    editText1.setText("");
                    // 调用TimerServer,程序后台运行,设置标志位为false,即禁用程序锁功能。
                    moveTaskToBack(true);
                    clock=false;
                    new TimerServer().timer(LockActivity.this,clock);

                }else{clock=true;
                    Toast.makeText(LockActivity.this, "密码错误,请重新输入",
                                 Toast.LENGTH_SHORT).show();
                }Log.i("shenmegui", "输入密码: "+edittext);
            }});

        //不断查询当前是否微信正在前台运行,若是且未在程序锁界面输入正确密码,
        // 则弹出程序锁输入密码界面
        final Timer timer_inLockActivity=new Timer();
        TimerTask task=new TimerTask() {@Override
            public void run() {ActivityManager activityManager=(ActivityManager) getSystemService(ACTIVITY_SERVICE);
                List<ActivityManager.RunningAppProcessInfo> list=activityManager.getRunningAppProcesses();
                if (list.get(0).processName=="com.tencent.mm"&&clock==true){//停止当前timer并重启LockActivity,即重新弹出程序锁输入密码界面
                    timer_inLockActivity.cancel();
                    recreate();
                }}};
        timer_inLockActivity.schedule(task,0,4000);
    }@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {// TODO Auto-generated method stub
        //修改后退按钮,使后退按钮失效。
        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {return true;
        }return super.onKeyDown(keyCode, event);
    }@Override
    protected void onUserLeaveHint() {//因为onKeyDown不能监听home键,故重写本方法。用户点击home键后新建计时器
        // 以查看当前运行程序是否为微信且未输入密码,若是,则弹出输入密码界面。
        new TimerServer().timer(this,true);
        Log.i("shenmegui", "onUserLeaveHint: ");
        super.onUserLeaveHint();
    }
}

该类对应的activity_lock.xml中绘制了一个editText1用来输入密码,button1用来提交密码,具体代码比较简单,不属核心程序,不再赘述。

3.3权限声明

最后要注意在AndroidManifests.xml中加上权限声明:
<uses-permission android:name="android.permission.REORDER_TASKS"></uses-permission>
<uses-permission android:name="android.permission.GET_TASKS"></uses-permission>
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"></uses-permission>

4.声明

本文章为本人原创文章,转载请加出处及链接。欢迎指正错误,欢迎留言,谢谢!

Android程序锁的实现相关推荐

  1. android程序锁预研

    项目要求增加程序锁功能.要预研一下. 网上反编了比较流行的程序锁,了解到大概方向: 1 后台服务不断监视显示在前台的应用. 2 当是需要锁住的应用,启动程序锁密码页面. 3 密码成功则关闭程序锁密码页 ...

  2. Android:程序锁功能的简单实现

    如我们所知,现在有很多牛逼的安全软件都带有程序锁的功能.当然,名字可能不一样,有的叫隐私保护,有的叫软件锁.等等.但是这种名字其实都是表达一种意思,就是可以给你手机里面的app加以保护.只有你给你的A ...

  3. Android 程序锁

    导读:本文介绍如何实现对应用加锁的功能,无须root权限 某些人有时候会有这样一种需求,小A下载了个软件,只是软件中的美女过于诱惑与暴露,所以他不想让别人知道这是个什么软件,起码不想让别人打开浏览.而 ...

  4. android安全问题(二) 程序锁

    导读:本文介绍如何实现对应用加锁的功能,无须root权限 某些人有时候会有这样一种需求,小A下载了个软件,只是软件中的美女过于诱惑与暴露,所以他不想让别人知道这是个什么软件,起码不想让别人打开浏览.而 ...

  5. Android开发——程序锁的实现(可用于开发钓鱼登录界面)

    1. 程序锁原理 1.1 实现效果: 在用户打开一个应用时,若此应用是我们业务内的逻辑拦截目标,那就在开启应用之后,弹出一个输入密码的界面,输入密码正确则进入目标应用.若不输入直接按返回键,则直接返回 ...

  6. 适用于Android设备的十大应用程序锁

    现如今的智能手机非常个人化,其中的应用程序确实会携带不同形式的个人数据,例如图片,消息,银行应用程序等. 应用锁也称为隐私锁,它是所有移动用户最关注的隐私问题之一.可以保护应用程序免受陌生人或在智能手 ...

  7. android程序键盘锁_适用于Android的最佳键盘应用程序

    android程序键盘锁 The interactions you have with your phone's keyboard are easily some of the most intima ...

  8. android布局管理器模仿qq登录效果,Android程序开发仿新版QQ锁屏下弹窗功能

    新版的qq,可以在锁屏下弹窗显示qq消息,正好目前在做的项目也需要这一功能.经过各种试验和资料查找,终于实现,过程不难,但是却有一些地方需要注意. 下面是实现过程. 1.使用Activity,而不是V ...

  9. Android之世面上程序锁的实现

    当我们为程序设置密码后,当我们第一次进入该程序时就会提示我们输入密码,输入正确密码后就可以继续访问该程序,如果再次访问该程序就不会提示我们输入密码,这就是市面上常见程序锁的实现. 开发思路: 1. 开 ...

最新文章

  1. echart的x换行
  2. Nginx 中 fastcgi_pass 监听端口 unix socket和tcp socket差别
  3. SQLServer禁用、启用外键约束
  4. [转载]Linux下getopt()函数的简单使用
  5. node.js之第一天
  6. THINKPHP_关联模型MANY_TO_MANY
  7. 2017蓝桥杯B组:承压计算(扩大倍数)
  8. FPV穿越机飞行入门练习
  9. 移动硬盘计算机限制打不开,移动硬盘突然打不开并且要求格式化怎么解决
  10. 【U3D方向专职猎头】 大厂、高薪职位资源多 非U3D资深勿扰 工作地点北京、深圳、上海、杭州、广州、成都、加微信17512088053
  11. 短视频“音频化”,音乐“视频化”
  12. Win8.1开始菜单Classic Shell 4.0上手
  13. Real-Time Rendering——5.3.3 Material Systems 材质系统
  14. java实现wife链接硬件_【技术分享】在Android 910上面实现WIFI功能
  15. AHCI sata设备初始化流程
  16. 阿里双十一,3分01秒破百亿;乐视网称贾跃亭无力履行承诺;法乐第未来宣布解职CFO和CTO丨价值早报
  17. 润雅信息完成B轮融资 大数据平台赋能汽车销售 1
  18. 智安新闻丨智安网络【一站式等保云平台】产品发布会,荣耀开启!
  19. GE凝胶成像 AI600
  20. erp故障处理流程图_ERP仓储管理流程图

热门文章

  1. 不写DAX实现TopN和其他
  2. 探讨位操作、算术右移、逻辑右移
  3. 在线安装计算机应用软件,计算机应用与网络基础教程 常用软件安装new.ppt
  4. Java代码实现ping命令
  5. 京沪深仍为经济发展水平最高的城市,平均薪酬增长率均在7%以上
  6. 感谢同济子豪兄的分享-关于RCNN论文的学习(二)
  7. 钢铁是怎样炼成的 第三章
  8. 【原创】HTML学习(2020.2.4)
  9. /usr/local/bin/pod install bug记录
  10. 如何做好一个项目经理