Android 手機衛士16--手機殺毒

来源:http://www.cnblogs.com/ganchuanpu/archive/2016/10/22/5987641.html
-Advertisement-
Play Games

1.指定動畫一直旋轉 android:repeatCount 重覆的次數,預設為0,必須是int,可以為-1表示不停止 1 public class AnitVirusActivity extends Activity { 2 protected static final int SCANING = ...


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

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在這園子里看到了很多優秀的資源,自己也想寫寫東西,就突然想到了以前遇到寫sass的時候出現中文亂碼的解決方案。所有就自己又總結了一下。(以下測試步驟都是自己完成的!沒有任何轉載,如有錯誤,希望大家指正) 簡單說明下:sass來編寫css樣式方便了很多,讓我們本來沒有邏輯處理能力的css語法,在sas ...
  • 箭頭函數(Arrow Functions) 就像名字所說那樣,箭頭函數使用箭頭(=>)來定義函數。與傳統函數相比,箭頭函數在多個地方表現不一樣。 箭頭函數語法(Arrow Function Syntax) 箭頭函數有多種實現方法。比如你想實現一個只有一個參數並且直接返回此參數值的函數: 上面的例子中 ...
  • HTML 語法 用兩個空格來代替製表符(tab) -- 這是唯一能保證在所有環境下獲得一致展現的方法。 嵌套元素應當縮進一次(即兩個空格)。 對於屬性的定義,確保全部使用雙引號,絕不要使用單引號。 不要在自閉合(self-closing)元素的尾部添加斜線 --HTML5 規範中明確說明這是可選的。... ...
  • 今天電腦按了一下xampp,結果運行wamp的時候,出現了下麵的情況: 在網上查了一下,結果是埠被占用,然後我就手動修改了一下。 1.修改xampp的埠號 依次找到:XAMPP的安裝目錄(比如D:\xampp)\apache\conf\httpd.conf,用記事本或notepad等工具打開ht ...
  • js做全選,用一個checkbox覆選框做多個checkbox覆選框的全選按鈕,有一個覆選框未被選擇時,全選按鈕的checked就為false ...
  • 為了讓裡面支持中文,我們加入這句話header("content-type:text/html;charset=utf-8"),此時的tigong.php如下 用我們的瀏覽器跑一下,如圖:將地址欄的信息地址複製一份,用postman測一下數據,如果不知道什麼是postman,請自行百度,後面的數據交 ...
  • 一、概述: 所有的應用程式都需要“數據”支持。對於大多數的Web應用程式來說,數據是在伺服器端進行組織和整理,然後由客戶端(瀏覽器端)通過網路請求獲取。隨著瀏覽器的處理能力不斷增強,可以在瀏覽器端存儲和操縱應用程式需要的數據,因此越來越多的網站開始考慮,將大量數據儲存在本地客戶端,這樣可以減少用戶等 ...
  • public class MainActivity extends Activity { Button bt; Context context; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...