<?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);
} }

最新文章

  1. linux运维中的命令梳理(二)
  2. Linux环境下搭建Tomcat+mysql+jdk
  3. LeetCode &quot;Valid Perfect Square&quot;
  4. js-二维数组和多维数组
  5. bash shell命令行选项与修传入参数处理
  6. 转: JSP中include指令和include动作的区别
  7. 在peopletools里面测试文件上传
  8. HTTP 417解决方案
  9. U盘制作Linux系统盘
  10. (转)HTTP 协议详解(基础)
  11. dom4j配置文件
  12. JVM之GC算法、垃圾收集算法——标记-清除算法、复制算法、标记-整理算法、分代收集算法
  13. fastjson存在乱序的问题
  14. C# System.IO.StreamReader
  15. Java项目中的异常处理情况
  16. Maths | Metropolis-Hastings algorithm
  17. Socket网络编程--网络爬虫(4)
  18. BZOJ3916: [Baltic2014]friends
  19. Redis集群搭建与使用
  20. JAVA—编码问题

热门文章

  1. XSLT2.0实用的新功能 .(转)
  2. 你是怎么理解“MVC”的
  3. thread.join函数,java多线程中的join函数解析
  4. XNA Game Studio 4.0 Programming 随便读,随便记 &ldquo;Rendering Text&rdquo;
  5. 时间,闰秒,及NTP
  6. &lt;Chapter 2&gt;2-2-2.开发Java应用(Developing a Java App)
  7. public, protected, private, internal, protected internal简析
  8. 30 分钟 Java Lambda 入门教程
  9. Gym 100507J Scarily interesting! (贪心)
  10. Spring EL regular expression example