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