android149 360 程序锁输入密码

简介:


复制代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="60dip"
        android:background="#8866ff00"
        android:gravity="center"
        android:text="请输入隐私保护密码"
        android:textSize="24sp" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="15dp"
        android:src="@drawable/icon_lock_big" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <EditText
            android:id="@+id/et_pwd"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="15dp" />

        <Button
            android:id="@+id/bt_ok"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_marginRight="10dp"
            android:background="@drawable/desktop_button_1"
            android:text="确定" />
    </RelativeLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="bottom"
        android:orientation="vertical" 
        android:background="#22000000">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <Button
                android:id="@+id/bt_1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="1" />

            <Button
                android:id="@+id/bt_2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="2" />

            <Button
                android:id="@+id/bt_3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="3" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <Button
                android:id="@+id/bt_4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="4" />

            <Button
                android:id="@+id/bt_5"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="5" />

            <Button
                android:id="@+id/bt_6"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="6" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <Button
                android:id="@+id/bt_7"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="7" />

            <Button
                android:id="@+id/bt_8"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="8" />

            <Button
                android:id="@+id/bt_9"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="9" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <Button
                android:id="@+id/bt_clean_all"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="清空" />

            <Button
                android:id="@+id/bt_0"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="0" />
            <Button
                android:id="@+id/bt_delete"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="删除" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>
复制代码
复制代码
package com.itheima.mobileguard.services;

import java.util.List;

import com.itheima.mobileguard.activities.EnterPwdActivity;
import com.itheima.mobileguard.db.dao.AppLockDao;

import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
import android.os.SystemClock;
import android.view.ViewDebug.FlagToString;
//作为一个服务,后台启动运行。
public class WatchDogService extends Service {
    private ActivityManager activityManager;
    private AppLockDao dao;

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    //临时停止保护的包名
    private String tempStopProtectPackageName;
    
    private class WatchDogReceiver extends BroadcastReceiver{
        @Override
        public void onReceive(Context context, Intent intent) {
            if(intent.getAction().equals("com.itheima.mobileguard.stopprotect")){
                //获取到停止保护的对象
                tempStopProtectPackageName = intent.getStringExtra("packageName");
            }else if(intent.getAction().equals(Intent.ACTION_SCREEN_OFF)){
                tempStopProtectPackageName = null;
                // 让狗休息
                falg = false;
            }else if(intent.getAction().equals(Intent.ACTION_SCREEN_ON)){
                //让狗继续干活
                if(falg == false){
                    startWatDog();
                }
            }
        }
    }
    
    @Override
    public void onCreate() {
        super.onCreate();
        dao = new AppLockDao(this);
        appLockInfos = dao.findAll();
        //注册广播接受者
        receiver = new WatchDogReceiver();
        IntentFilter filter = new IntentFilter();
        //停止保护
        filter.addAction("com.itheima.mobileguard.stopprotect");
        //注册一个锁屏的广播
        /**
         * 当屏幕锁住的时候。狗就休息
         * 屏幕解锁的时候。让狗活过来
         */
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        filter.addAction(Intent.ACTION_SCREEN_ON);
        registerReceiver(receiver, filter);
        //获取到进程管理器
        activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
        //1 首先需要获取到当前的任务栈
        //2取任务栈最上面的任务
        startWatDog();
    }
    //标记当前的看萌狗是否停下来
    private boolean falg = false;
    private List<String> appLockInfos;
    private WatchDogReceiver receiver;
    
    private void startWatDog() {
        new Thread(){
            public void run() {
                falg = true;
                while (falg) {
                    //由于这个狗一直在后台运行。为了避免程序阻塞。
                    //获取到当前正在运行的任务栈
                    List<RunningTaskInfo> tasks = activityManager.getRunningTasks(1);
                    //获取到最上面的进程就是正在打开的应用。判断是否已经加锁。
                    RunningTaskInfo taskInfo = tasks.get(0);
                    //获取到最顶端应用程序的包名
                    String packageName = taskInfo.topActivity.getPackageName();
                    System.out.println(packageName);
                    //让狗休息一会
                    SystemClock.sleep(30);
                    //直接从数据库里面查找当前的数据
                    //这个可以优化。改成从内存当中寻找
                    if(appLockInfos.contains(packageName)){
//                    if(dao.find(packageName)){
//                        System.out.println("在程序锁数据库里面");
                        //说明需要临时取消保护
                        //是因为用户输入了正确的密码
                        if(packageName.equals(tempStopProtectPackageName)){
                        }else{
                            Intent intent = new Intent(WatchDogService.this,EnterPwdActivity.class);
                            /**
                             * 需要注意:如果是在服务里面往activity界面跳的话。需要设置flag
                             */
                            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            //停止保护的对象
                            intent.putExtra("packageName", packageName);
                            startActivity(intent);
                        }
                    }
                }
            };
        }.start();
    }

    //调用stopService()方法就会调用onDestroy(),
    @Override
    public void onDestroy() {
        super.onDestroy();
        falg = false;
        unregisterReceiver(receiver);
        receiver = null;
    }
}
复制代码
复制代码
package com.itheima.mobileguard.activities;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.InputType;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

import com.itheima.mobileguard.R;
import com.itheima.mobileguard.utils.UIUtils;

public class EnterPwdActivity extends Activity implements OnClickListener {

    private EditText et_pwd;
    private Button bt_0;
    private Button bt_1;
    private Button bt_2;
    private Button bt_3;
    private Button bt_4;
    private Button bt_5;
    private Button bt_6;
    private Button bt_7;
    private Button bt_8;
    private Button bt_9;
    private Button bt_clean_all;
    private Button bt_delete;
    private Button bt_ok;
    private String packageName;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_set_pwd);
        initUI();
    }

    private void initUI() {
        Intent intent = getIntent();
        if (intent != null) {
            packageName = intent.getStringExtra("packageName");
        }
        et_pwd = (EditText) findViewById(R.id.et_pwd);
        // 隐藏当前的键盘
        et_pwd.setInputType(InputType.TYPE_NULL);
        
        bt_0 = (Button) findViewById(R.id.bt_0);
        bt_1 = (Button) findViewById(R.id.bt_1);
        bt_2 = (Button) findViewById(R.id.bt_2);
        bt_3 = (Button) findViewById(R.id.bt_3);
        bt_4 = (Button) findViewById(R.id.bt_4);
        bt_5 = (Button) findViewById(R.id.bt_5);
        bt_6 = (Button) findViewById(R.id.bt_6);
        bt_7 = (Button) findViewById(R.id.bt_7);
        bt_8 = (Button) findViewById(R.id.bt_8);
        bt_9 = (Button) findViewById(R.id.bt_9);

        bt_ok = (Button) findViewById(R.id.bt_ok);
        bt_ok.setOnClickListener(this);
        bt_clean_all = (Button) findViewById(R.id.bt_clean_all);
        bt_delete = (Button) findViewById(R.id.bt_delete);
        // 清空
        bt_clean_all.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                et_pwd.setText("");
            }
        });
        // 删除
        bt_delete.setOnClickListener(new OnClickListener() {
            private String str;
            @Override
            public void onClick(View v) {
                str = et_pwd.getText().toString();
                if (str.length() == 0) {
                    return;
                }
                et_pwd.setText(str.substring(0, str.length() - 1));
            }
        });

        bt_0.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String str = et_pwd.getText().toString();
                et_pwd.setText(str + bt_0.getText().toString());
            }
        });
        bt_1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String str = et_pwd.getText().toString();
                et_pwd.setText(str + bt_1.getText().toString());
            }
        });
        bt_2.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String str = et_pwd.getText().toString();
                et_pwd.setText(str + bt_2.getText().toString());
            }
        });
        bt_3.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String str = et_pwd.getText().toString();
                et_pwd.setText(str + bt_3.getText().toString());
            }
        });
        bt_4.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String str = et_pwd.getText().toString();
                et_pwd.setText(str + bt_4.getText().toString());
            }
        });
        bt_5.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String str = et_pwd.getText().toString();
                et_pwd.setText(str + bt_5.getText().toString());
            }
        });
        bt_6.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String str = et_pwd.getText().toString();
                et_pwd.setText(str + bt_6.getText().toString());
            }
        });
        bt_7.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String str = et_pwd.getText().toString();
                et_pwd.setText(str + bt_7.getText().toString());
            }
        });
        bt_8.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String str = et_pwd.getText().toString();
                et_pwd.setText(str + bt_8.getText().toString());
            }
        });
        bt_9.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String str = et_pwd.getText().toString();
                et_pwd.setText(str + bt_9.getText().toString());
            }
        });
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.bt_ok:
            String result = et_pwd.getText().toString();
            if ("123".equals(result)) {
                // 如果密码正确。说明是自己人
                /**
                 * 是自己家人。不要拦截他
                 */
                System.out.println("密码输入正确");
                Intent intent = new Intent();
                // 发送广播。停止保护
                intent.setAction("com.itheima.mobileguard.stopprotect");
                // 跟狗说。现在停止保护短信
                intent.putExtra("packageName", packageName);
                sendBroadcast(intent);
                finish();
            } else {
                UIUtils.showToast(EnterPwdActivity.this, "密码错误");
            }
            break;
        }
    }

    // 监听当前页面的后退健
    // <intent-filter>
    // <action android:name="android.intent.action.MAIN" />
    // <category android:name="android.intent.category.HOME" />
    // <category android:name="android.intent.category.DEFAULT" />
    // <category android:name="android.intent.category.MONKEY"/>
    // </intent-filter>
    @Override
    public void onBackPressed() {
        // 当用户输入后退健 的时候。我们进入到桌面
        Intent intent = new Intent();
        intent.setAction("android.intent.action.MAIN");
        intent.addCategory("android.intent.category.HOME");
        intent.addCategory("android.intent.category.DEFAULT");
        intent.addCategory("android.intent.category.MONKEY");
        startActivity(intent);
    }

}
复制代码

 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/5156005.html,如需转载请自行联系原作者

相关文章
|
9月前
|
数据采集 编解码 Ubuntu
Android流媒体开发之路二:NDK C++开发Android端RTMP直播推流程序
Android流媒体开发之路二:NDK C++开发Android端RTMP直播推流程序
212 0
|
6月前
|
存储 传感器 定位技术
《移动互联网技术》 第四章 移动应用开发: Android Studio开发环境的使用方法:建立工程,编写源程序,编译链接,安装模拟器,通过模拟器运行和调试程序
《移动互联网技术》 第四章 移动应用开发: Android Studio开发环境的使用方法:建立工程,编写源程序,编译链接,安装模拟器,通过模拟器运行和调试程序
65 0
|
6月前
|
Java Android开发 开发者
1024程序节|Android框架之一 BRVAH【BaseRecyclerViewAdapterHelper】使用demo
BRVAH是一个强大的RecyclerAdapter框架(什么是RecyclerView?),它能节约开发者大量的开发时间,集成了大部分列表常用需求解决方案。为什么会有它?请查看「Android开源框架BRVAH由来篇」该框架于2016年4月10号发布的第1个版本到现在已经一年多了,经历了800多次代码提交,140多次版本打包,修复了1000多个问题,获得了9000多star,非常感谢大家的使用以及反馈。
138 0
|
XML Java Android开发
Android Studio开发APP启动程序时开屏简单动画效果快速有效解决方案
Android Studio开发APP启动程序时开屏简单动画效果快速有效解决方案
1326 0
Android Studio开发APP启动程序时开屏简单动画效果快速有效解决方案
|
4月前
|
网络协议 Android开发 虚拟化
Android Studio无法运行程序调试程序出现Unable to connect to ADB.Check the Event Log for possible issues.Verify th
Android Studio无法运行程序调试程序出现Unable to connect to ADB.Check the Event Log for possible issues.Verify th
59 0
Android Studio无法运行程序调试程序出现Unable to connect to ADB.Check the Event Log for possible issues.Verify th
|
6月前
|
数据安全/隐私保护 Android开发 iOS开发
解决第三方邮箱APP登陆QQ、163邮箱无法验证账户名或密码的问题(IOS、MacOS、Windows、Android)
解决第三方邮箱APP登陆QQ、163邮箱无法验证账户名或密码的问题(IOS、MacOS、Windows、Android)
109 0
|
6月前
|
Java 数据安全/隐私保护 Android开发
Android 实战项目 -- 登录主页、找回密码
Android 实战项目 -- 登录主页、找回密码
89 0
|
6月前
|
测试技术 开发工具 数据库
《移动互联网技术》第十一章 Android应用工程案例: 掌握Android系统的需求分析和设计以及 Android项目的程序测试和版本管理方法
《移动互联网技术》第十一章 Android应用工程案例: 掌握Android系统的需求分析和设计以及 Android项目的程序测试和版本管理方法
71 0
|
8月前
|
XML Java Android开发
#4,Android Studio Android程序结构 工程目录介绍 文件作用 运行配置文件AndroidManifest.xml
#4,Android Studio Android程序结构 工程目录介绍 文件作用 运行配置文件AndroidManifest.xml
|
8月前
|
存储 Android开发 开发者
#2,Android新建第一个程序 Hello Android 模拟手机
#2,Android新建第一个程序 Hello Android 模拟手机