小白马卫士之手机杀毒

原理概述

手机杀毒的话,其实就是通过PackageManager的管理者获得手机上面所有安装好的程序,然后在病毒库里面检测与当前程序是否与病毒库里面的程序匹配,如果匹配的话,那就有病毒,然后将其删除就行了!

在这之前需要一个DAO来进行检查是否有病毒:

package cn.cbd.mobilesafe.activity.db.dao;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class AntVirusDao {
	
	public static boolean isVirus(String md5) 
	{
		boolean bol=false;
		SQLiteDatabase db=SQLiteDatabase.openDatabase("/data/data/cn.cbd.mobilesafe.activity/files/antivirus.db", null,SQLiteDatabase.OPEN_READONLY);
		Cursor cursor=db.rawQuery("select * from datable where md5=?", new String[]{md5});
		while(cursor.moveToFirst())
		{
			bol=true;
		}
		cursor.close();
		db.close();
		return bol;
	}
}

然后就是加载界面的主要类了:


package cn.cbd.mobilesafe.activity;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;

import cn.cbd.mobilesafe.activity.db.dao.AntVirusDao;
import cn.cbd.mobilesafe.activity.util.MD5Util;

public class AntVirusActivity extends Activity {

	private ImageView iv_scan;
	private TextView tv_scan_stauts;
	private ProgressBar pb_scan_status;
	private LinearLayout ll_container;
	private PackageManager pm;
	private List<String> virusList;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_kill_virus);
		
		virusList=new ArrayList<String>();
		tv_scan_stauts=(TextView) findViewById(R.id.tv_scan_stauts);
		pb_scan_status=(ProgressBar) findViewById(R.id.pb_scan_status);
		ll_container=(LinearLayout) findViewById(R.id.ll_container);
		
		iv_scan=(ImageView) findViewById(R.id.iv_scan);
		RotateAnimation animation=new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 1.0f, Animation.RELATIVE_TO_SELF, 1.0f);
		animation.setDuration(1000);
		animation.setRepeatCount(Animation.INFINITE);
		iv_scan.startAnimation(animation);
		
		new AsyncTask<Void, Object, Void>(){

			
			@Override
			protected void onPreExecute() {
				
				tv_scan_stauts.setText("正在初始化八核扫描引擎...");
				super.onPreExecute();
			}
			
			@Override
			protected Void doInBackground(Void... params) {
				
				try 
				{
					Thread.sleep(1000);
					pm=getPackageManager();
					//通过包的管理者获得安装的程序集合
					List<PackageInfo> packageInfos=pm.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES | PackageManager.GET_SIGNATURES);
					pb_scan_status.setMax(packageInfos.size());  //设置进度条的最大刻度
					Log.i("aaa",""+packageInfos.size());
					int total=0;
					for(PackageInfo packageInfo : packageInfos)
				    {
						//循环出每一个安装的程序
				    	String signatures=packageInfo.signatures[0].toCharsString();
				    	boolean isVirsus=AntVirusDao.isVirus(MD5Util.ecode(signatures));
				    	//如果是病毒
				    	if(isVirsus)
				    	{
				    		virusList.add(packageInfo.packageName);
				    	}
				    	Log.i("ccc",signatures);
				    	total++;
				    	pb_scan_status.setProgress(total);
				    	publishProgress("正在扫描:"+packageInfo.applicationInfo.loadLabel(pm),packageInfo.applicationInfo,isVirsus);
				        Thread.sleep(200);
				    }
				}
				catch (Exception e) {
					e.printStackTrace();
				}
				
				
				return null;
			}

			@Override
			protected void onPostExecute(Void result) {
				tv_scan_stauts.setText("全部扫描完毕!");
				iv_scan.clearAnimation();
				if(virusList.size()>0)  //检测病毒列表是不是大于0的如果大于0就弹出来一个对话框
				{
					AlertDialog.Builder builder=new Builder(AntVirusActivity.this);
					builder.setTitle("警告");
					builder.setMessage("发现病毒是否清理?");
					builder.setPositiveButton("确定", new OnClickListener(){

						@Override
						public void onClick(DialogInterface dialog, int which) {
							for (String packname : virusList) {
								Intent intent = new Intent();
								intent.setAction(Intent.ACTION_DELETE);
								intent.setData(Uri.parse("package:" + packname));
								startActivity(intent);

							}
							
						}
						
					});
					builder.setNegativeButton("取消", new OnClickListener() {

						public void onClick(DialogInterface dialog, int which) {
							// TODO Auto-generated method stub

						}
					});
					builder.create().show();
					
				}
				super.onPostExecute(result);
			}

			@Override
			protected void onProgressUpdate(Object... values) {
				/**
				 * 这里比较关键一些,这里的布局是这样的:
				 *   <ScrollView
				        android:layout_width="fill_parent"
				        android:layout_height="fill_parent" 
				        android:scrollbars="none">
				
				        <LinearLayout
				            android:id="@+id/ll_container"
				            android:layout_width="fill_parent"
				            android:layout_height="fill_parent"
				            android:orientation="vertical" >
				        </LinearLayout>
				    </ScrollView>
				    也就是说,列表显示的部分是一个ScrollView布局
				 */
				
				tv_scan_stauts.setText((String)values[0]);
				ApplicationInfo applicationInfo=(ApplicationInfo) values[1];
				boolean isVirsus=(Boolean) values[2];
				View view=View.inflate(getApplicationContext(), R.layout.layout_cache_item, null);
				ImageView iv=(ImageView) view.findViewById(R.id.iv_cache);
				TextView tv_name=(TextView) view.findViewById(R.id.tv_cache);
				TextView tv_info=(TextView) view.findViewById(R.id.tv_cache_size);
				iv.setImageDrawable(applicationInfo.loadIcon(pm));
				tv_name.setText(applicationInfo.loadLabel(pm));
				if(isVirsus)
				{
					tv_info.setTextColor(Color.RED);
					tv_info.setText("发现病毒");
				}else{
					tv_info.setText("扫描安全");
				}
				
				ll_container.addView(view,0);
				super.onProgressUpdate(values);
			}
			
		}.execute();
	
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值