手机安全卫士09

 1.程序锁的ui界面

(1)ListView长点击事件
 setOnItemLongClickListener();
(2)用数据库保存,加锁包名,

2.程序锁工作的原理

(1)覆盖
(2)获取系统堆栈信息,需要权限
GET_Task
(3)新建服务,获取任务栈最顶部的activity,即用户操作的activity。
a.看门狗
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();
	}
不停的判断用户使用哪个程序,如果是加锁程序,就立刻跳入输入密码的Activity

b.开启代码


3.程序锁的主体功能完成

(1)关闭输入密码的对话框
finish();
(2)通过广播在activity向服务发消息
(3)输入密码的Activity
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) {
		// TODO Auto-generated method stub
		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);
	}

}

(4)服务完整代码
public class WatchDogService extends Service {

	private ActivityManager activityManager;
	private AppLockDao dao;   //操作数据库

	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		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() {
		// TODO Auto-generated method stub
		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();
	}

	@Override
	public void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		falg = false;
		unregisterReceiver(receiver);
		receiver = null;
	}

}

4.利用activity的启动模式修复bug

(1)任务栈问题


5.最近任务列表移除

(1)在Activity配置中加入
android:exclideFormRecents="true"

6.程序锁的完成


深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值