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
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...