1、activity_main.xml文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/iv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/a" />
<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/sv"
><LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/ll"
android:orientation="vertical"
></LinearLayout></ScrollView>
</LinearLayout>
2、代码实现
public class MainActivity extends Activity {
private int STOP=100;
private ImageView iv;
private ProgressBar pb;
private LinearLayout ll;
private AnimationDrawable anim;
private SQLiteDatabase db;
private boolean flagscanning=false;
private ScrollView sv;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what==STOP) {
ll.removeAllViews();
anim.stop();
}
String str=(String) msg.obj;
TextView tv=new TextView(getApplicationContext());
tv.setText(str);
ll.addView(tv);
sv.scrollBy(0 ,20);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
db = SQLiteDatabase.openDatabase("/dev/antivirus.db", null,
SQLiteDatabase.OPEN_READONLY);
// 判断手机内存是否存在这数据库
File file = new File(
"/dev/antivirus.db");
if (!file.exists()) {
coppyFile();
}
iv = (ImageView) this.findViewById(R.id.iv);
pb = (ProgressBar) this.findViewById(R.id.progressBar1);
ll = (LinearLayout) this.findViewById(R.id.ll);
iv.setBackgroundResource(R.drawable.anti_anim);
anim = (AnimationDrawable) iv.getBackground();
sv=(ScrollView) this.findViewById(R.id.sv);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (flagscanning) {
return false;
}
if (event.getAction()==MotionEvent.ACTION_UP) {
System.out.println("diaj");
anim.start();
new Thread() {
public void run() {
List<PackageInfo> infos = getPackageManager()
.getInstalledPackages(
PackageManager.GET_UNINSTALLED_PACKAGES
| PackageManager.GET_SIGNATURES);// 卸载掉但没卸载干净的package
// 获取每一个应用程序的签名,获取签名后需要在数据库查询
pb.setMax(infos.size());
int total=0;
int virustotal=0;
for (PackageInfo info : infos) {
total++;
try {
sleep(20);
} catch (Exception e) {
e.printStackTrace();
}
Message msg=Message.obtain();
msg.obj="正在扫描"+info.packageName;
handler.sendMessage(msg);
Signature[] signs = info.signatures;
String str = signs[0].toCharsString();
String md5 = MD5Ecoder.encode(str);
Cursor cursor=db.rawQuery("select desc from datable where md5=?", new String[]{md5});
if (cursor.moveToFirst()) {
String desc=cursor.getString(0);
msg.obj=info.packageName+":"+desc;
handler.sendMessage(msg);
virustotal++;
}
cursor.close();
pb.setProgress(total);
}
Message msg=Message.obtain();
msg.what=STOP;
msg.obj="扫描完毕,共发现"+virustotal+"病毒";
handler.sendMessage(msg);
flagscanning=false;
pb.setProgress(0);
};
}.start();
}
return super.onTouchEvent(event);
}
private void coppyFile() {
// 如果不在sd卡就把db从asset目录拷贝到数据库
// 下面是文件拷贝操作
AssetManager manager = getAssets();
try {
InputStream is = manager.open("antivirus.db");
File file = new File("/dev/antivirus.db");
FileOutputStream fos = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = is.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
fos.flush();
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
protected void onDestroy() {
if (db.isOpen()) {
db.close();
}
super.onDestroy();
}
}