Android 手机卫士16--手机杀毒

1.指定动画一直旋转

rotateAnimation.setRepeatCount(RotateAnimation.INFINITE);

android:repeatCount 重复的次数,默认为0,必须是int,可以为-1表示不停止  

  1 public class AnitVirusActivity extends Activity {
  2     protected static final int SCANING = 100;
  3
  4     protected static final int SCAN_FINISH = 101;
  5
  6     private ImageView iv_scanning;
  7     private TextView tv_name;
  8     private ProgressBar pb_bar;
  9     private LinearLayout ll_add_text;
 10     private int index = 0;
 11     private List<ScanInfo> mVirusScanInfoList;
 12     private Handler mHandler = new Handler(){
 13         public void handleMessage(android.os.Message msg) {
 14             switch (msg.what) {
 15             case SCANING:
 16                 //1,显示正在扫描应用的名称
 17                 ScanInfo info = (ScanInfo)msg.obj;
 18                 tv_name.setText(info.name);
 19                 //2,在线性布局中添加一个正在扫描应用的TextView
 20                 TextView textView = new TextView(getApplicationContext());
 21                 if(info.isVirus){
 22                     //是病毒
 23                     textView.setTextColor(Color.RED);
 24                     textView.setText("发现病毒:"+info.name);
 25                 }else{
 26                     //不是病毒
 27                     textView.setTextColor(Color.BLACK);
 28                     textView.setText("扫描安全:"+info.name);
 29                 }
 30                 ll_add_text.addView(textView, 0);
 31                 break;
 32             case SCAN_FINISH:
 33                 tv_name.setText("扫描完成");
 34                 //停止真正执行的旋转动画
 35                 iv_scanning.clearAnimation();
 36                 //告知用户卸载包含了病毒的应用
 37                 unInstallVirus();
 38                 break;
 39             }
 40         };
 41     };
 42
 43
 44
 45     @Override
 46     protected void onCreate(Bundle savedInstanceState) {
 47         super.onCreate(savedInstanceState);
 48         setContentView(R.layout.activity_anit_virus);
 49
 50         initUI();
 51         initAnimation();
 52         checkVirus();
 53     }
 54
 55     protected void unInstallVirus() {
 56         for(ScanInfo scanInfo:mVirusScanInfoList){
 57             String packageName = scanInfo.packageName;
 58             //源码
 59             Intent intent = new Intent("android.intent.action.DELETE");
 60             intent.addCategory("android.intent.category.DEFAULT");
 61             intent.setData(Uri.parse("package:"+packageName));
 62             startActivity(intent);
 63         }
 64     }
 65
 66     private void checkVirus() {
 67         new Thread(){
 68             public void run() {
 69                 //获取数据库中所有的病毒的md5码
 70                 List<String> virusList = VirusDao.getVirusList();
 71                 //获取手机上面的所有应用程序签名文件的md5码
 72                 //1.获取包管理者对象
 73                 PackageManager pm = getPackageManager();
 74                 //2.获取所有应用程序签名文件(PackageManager.GET_SIGNATURES 已安装应用的签名文件+)
 75                 //PackageManager.GET_UNINSTALLED_PACKAGES    卸载完了的应用,残余的文件
 76                 List<PackageInfo> packageInfoList = pm.getInstalledPackages(
 77                         PackageManager.GET_SIGNATURES + PackageManager.GET_UNINSTALLED_PACKAGES);
 78                 //创建记录病毒的集合
 79
 80                 mVirusScanInfoList = new ArrayList<ScanInfo>();
 81
 82                 //记录所有应用的集合
 83                 List<ScanInfo> scanInfoList = new ArrayList<ScanInfo>();
 84
 85                 //设置进度条的最大值
 86                 pb_bar.setMax(packageInfoList.size());
 87
 88                 //3.遍历应用集合
 89                 for (PackageInfo packageInfo : packageInfoList) {
 90                     ScanInfo scanInfo = new ScanInfo();
 91                     //获取签名文件的数组
 92                     Signature[] signatures = packageInfo.signatures;
 93                     //获取签名文件数组的第一位,然后进行md5,将此md5和数据库中的md5比对
 94                     Signature signature = signatures[0];
 95                     String string = signature.toCharsString();
 96                     //32位字符串,16进制字符(0-f)
 97                     String encoder = Md5Util.encoder(string);
 98                     //4,比对应用是否为病毒
 99                     if(virusList.contains(encoder)){
100                         //5.记录病毒
101                         scanInfo.isVirus = true;
102                         mVirusScanInfoList.add(scanInfo);
103                     }else{
104                         scanInfo.isVirus = false;
105                     }
106                     //6,维护对象的包名,以及应用名称
107                     scanInfo.packageName = packageInfo.packageName;
108                     scanInfo.name = packageInfo.applicationInfo.loadLabel(pm).toString();
109                     scanInfoList.add(scanInfo);
110                     //7.在扫描的过程中,需要更新进度条
111                     index++;
112                     pb_bar.setProgress(index);
113
114                     try {
115                         Thread.sleep(50+new Random().nextInt(100));
116                     } catch (InterruptedException e) {
117                         e.printStackTrace();
118                     }
119
120                     //8.在子线程中发送消息,告知主线程更新UI(1:顶部扫描应用的名称2:扫描过程中往线性布局中添加view)
121                     Message msg = Message.obtain();
122                     msg.what = SCANING;
123                     msg.obj = scanInfo;
124                     mHandler.sendMessage(msg);
125                 }
126                 Message msg = Message.obtain();
127                 msg.what = SCAN_FINISH;
128                 mHandler.sendMessage(msg);
129             };
130         }.start();
131     }
132
133     class ScanInfo{
134         public boolean isVirus;
135         public String packageName;
136         public String name;
137     }
138
139     private void initAnimation() {
140         RotateAnimation rotateAnimation = new RotateAnimation(
141                 0, 360,
142                 Animation.RELATIVE_TO_SELF, 0.5f,
143                 Animation.RELATIVE_TO_SELF, 0.5f);
144         rotateAnimation.setDuration(1000);
145         //指定动画一直旋转
146 //        rotateAnimation.setRepeatMode(RotateAnimation.INFINITE);
147         rotateAnimation.setRepeatCount(RotateAnimation.INFINITE);
148         //保持动画执行结束后的状态
149         rotateAnimation.setFillAfter(true);
150         //一直执行动画
151         iv_scanning.startAnimation(rotateAnimation);
152     }
153
154     private void initUI() {
155         iv_scanning = (ImageView) findViewById(R.id.iv_scanning);
156         tv_name = (TextView) findViewById(R.id.tv_name);
157         pb_bar = (ProgressBar) findViewById(R.id.pb_bar);
158         ll_add_text = (LinearLayout) findViewById(R.id.ll_add_text);
159     }
160 }

AnitVirusActivity

时间: 2024-11-02 07:56:54

Android 手机卫士16--手机杀毒的相关文章

手机卫士04_ 手机定位_超级管理员_数据库

1.1 定位功能简介: 常见的定位方式: ①网络定位:(IP地址),拨号上网一般是动态分配,如果网吧公司,就是静态分配的. 比较有名的数据库:纯真Ip数据库,有很多公开的ip信息 根据ip地址定位.可能很准确,也可能只是一个大概的范围 ②基站定位:必须有手机卡才能基站定位 根据手机与基站联系的信号强弱+算法定位. 定位效果:可能很准确,(与基站位置相关,周围基站越多越近效果越好.) ③GPS定位:采用卫星定位 利用卫星的位置与手机GPS模块的建立联系,通过算法判断位置. 至少需要三颗卫星,获取手

手机卫士10_widget_流量统计_手机杀毒

1._widget入门: 查看帮助文档>>Developrs>>API Guides>>App Widgets 实际上是一个迷你的应用程序VIew视图,嵌入在另外一个应用程序视图. 标准的android和兼容widget的手机才能显示,被修改过的系统是无法显示的. 实现步骤: ①创建类继承APPWidgetProvider//一个方便的帮助类,用来实现一个appwidget 它继承了广播接收者,实现原理也是通过广播实现的,特殊的广播接收者. ②在清单文件里配置广播接收者

Android核心基础(手机卫士的一个知识点总结)

注意:有些功能是需要权限的,在这里并没有写出来,在程序运行中,根据程序报的错误,添加相应的权限即可,里面的具体里面可能有一些小细节,没有明确的写出来,具体的需要在程序中自己调试,解决. 这个总结涵盖了Android的一些核心的内容,如四大组建Service.ContentProvider.BroadCastReceiver.Activity,而且四大组建都必须在清单文件中注册. 还涉及了Android手机底层的一些功能,如读取联系人.短信等.还有一些看似牛别点技术,什么短息拦截,电话拦截,黑名单

[android] 手机卫士欢迎细节和主界面

splash界面的细节 ctrl + O 搜索 在去标题的时候,对话框主题被去掉了,有点丑,现在既要有新版本的对话框又不显示标题 把清单文件中activity节点的主题去掉 进入到application节点的样式设置文件里面,添加一句 <item name="android:windowNoTitle">true</item> 设置点返回和空白地方对话框不消失 调用AlertDialog.Builer对象的setCancelable(false),强制升级的时候

Android 手机卫士12--进程管理

1.本进程不能被选中,所以先将checkbox隐藏掉--手机卫士 不能自杀 if(getItem(position).packageName.equals(getPackageName())){ holder.cb_box.setVisibility(View.GONE); }else{ holder.cb_box.setVisibility(View.VISIBLE); } 2.清理选中进程 private void clearAll() { //1,获取选中进程 //2,创建一个记录需要杀死

Android 手机卫士--九宫格使用

本文地址:http://www.cnblogs.com/wuyudong/p/5907736.html,转载请注明源地址. 采用GridView来实现,和ListView使用方式类似,列数(3列) 首先添加GridView <!-- android:numColumns指定列数 --> <!-- android:verticalSpacing="10dp"指定内部条目竖直方向间距为10dp --> <GridView android:id="@+

手机杀毒进度条特效

public class MainActivity extends Activity { private ImageView iv_main_scan; private TextView tv_main_scan; private ProgressBar pb_main_scan; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setConten

Android 手机卫士--安装过程中点击回退按钮

本文地址:http://www.cnblogs.com/wuyudong/p/5903707.html,转载请注明源地址. 在手机卫士之前的版本升级的对话框中: 有的用户暂时不想更新,没有点击“稍后再说”,而是选择点击回退按键,那么这时候的逻辑应该是让用户进入home界面而不是splash界面.所以需要添加代码逻辑来控制,添加的代码如下: builder.setOnCancelListener(new OnCancelListener() { @Override public void onCa

Android 手机卫士--阶段小结1

本文地址:http://www.cnblogs.com/wuyudong/p/5904528.html,转载请注明源地址. 本文对之前手机卫士开发进行一个小结. 1.SplashActivity 版本名称的展示,从清单配置文件中获取版本名称,PackageManager 服务端新版本的检测(本地版本号<服务器版本号) 展示logo 2.手机防盗 sim卡绑定:每一款手机都会有相应的卡的序列号,一旦替换掉原有电话卡,序列号会发生改变 3.手机卫士分包 基础课程分包方式,每一个类包名, com.it