由于手机内存有限,有时需要一次删除很多个包,这时就需要一个实现Android包批量删除的应用。

首先是布局文件:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <LinearLayout        android:layout_width="fill_parent"        android:layout_height="match_parent"        android:layout_weight="5" >        <TextView            android:id="@+id/textView1"            style="@style/my_style"            android:layout_width="match_parent"            android:layout_height="fill_parent"            android:layout_weight="4" />        <TextView            android:id="@+id/textView2"            style="@style/my_style"            android:layout_width="match_parent"            android:layout_height="fill_parent"            android:layout_gravity="center_vertical|center_horizontal"            android:layout_weight="1"            android:gravity="center_vertical|center_horizontal"            android:text="应用名称" />        <TextView            android:id="@+id/textView3"            android:layout_width="match_parent"            android:layout_height="fill_parent"            android:layout_weight="4"            android:gravity="center_vertical|center_horizontal"            android:text="是否系统应用" />    </LinearLayout>        <ListView        android:id="@id/android:list"        android:layout_width="fill_parent"        android:layout_height="match_parent"        android:layout_weight="1" >    </ListView>    <Button        android:id="@+id/btn_apk"        style="@style/my_style"        android:layout_width="fill_parent"        android:layout_height="match_parent"        android:layout_weight="5"        android:text="卸载" /></LinearLayout>

布局文件相对简单,最重要的是列表。

然后是类文件:

package com.hzhi.sysinfor;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.AlertDialog;import android.app.ListActivity;import android.app.ProgressDialog;import android.content.Context;import android.content.DialogInterface;import android.content.Intent;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.graphics.drawable.Drawable;import android.net.Uri;import android.os.Bundle;import android.util.Log;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.CompoundButton.OnCheckedChangeListener;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import android.widget.Toast;public class apk<PackageDeleteObserver> extends ListActivity{Button btn_unload;PackageManager pkg_man;PackageDeleteObserver pkg_obs;list_apk list_ada;// 获得所有的应用列表public void get_app(){ list_ada = new list_apk(this);        // 包管理器PackageManager pm = getPackageManager();// 获取手机内所有应用List<PackageInfo> pi = pm.getInstalledPackages(0); for (int i=0; i<pi.size(); i++){PackageInfo pii = (PackageInfo) pi.get(i);String is_sys;Drawable icon;// 是否系统应用if ((pii.applicationInfo.flags & pii.applicationInfo.FLAG_SYSTEM) <= 0)is_sys = "否";elseis_sys = "是";if (pii.applicationInfo.loadIcon(pm) != null)icon = (Drawable)pii.applicationInfo.loadIcon(pm);elseicon = (Drawable) getResources().getDrawable(R.drawable.ic_launcher);list_ada.addItem(String.valueOf(pii.applicationInfo.loadLabel(pm)),is_sys, icon,pii.applicationInfo.packageName,false);}                setListAdapter(list_ada);}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_list_apk);get_app();                btn_unload = (Button) findViewById(R.id.btn_apk);        btn_unload.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {for (int j=0; j<list_ada.list_data.size(); j++){// 该应用需要删除if (list_ada.list_data.get(j).is_chk){String name = (String) list_ada.list_data.get(j).
                                            txt_name.getText();final String pak = list_ada.list_data.get(j).item_pak;new AlertDialog.Builder(apk.this).setTitle("删除应用").setMessage("确定删除" + name + "吗?").setPositiveButton("是",
                                  new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface arg0, int arg1)
                                     {unload(pak);get_app();}}).setNegativeButton("否", null).show();}}}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}public boolean unload (String n){boolean res = true;try{// 通过包名创建URIUri pu = Uri.parse("package:" + n);// 创建IntentIntent i = new Intent(Intent.ACTION_DELETE, pu);// 执行卸载程序startActivity(i);res = true;}catch(Exception e){res = false;}finally{return res;}}}//apk列表class list_apk extends BaseAdapter implements OnClickListener{ public Context ctx;public List<item_apk> list_data; public list_apk(Context context){ ctx = context;list_data = new ArrayList<item_apk>(); }@Overridepublic int getCount() {// TODO Auto-generated method stubreturn list_data.size();}@Overridepublic Object getItem(int arg0) { // TODO Auto-generated method stub return list_data.get(arg0);}@Overridepublic long getItemId(int arg0) { // TODO Auto-generated method stub return list_data.indexOf(arg0);}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {item_apk my_item; Integer i = 0; if (convertView == null) { my_item = new item_apk(ctx, (String)list_data.get(position).txt_name.getText(), (String)list_data.get(position).txt_flag.getText(), list_data.get(position).img_apk.getDrawable(), list_data.get(position).item_pak, list_data.get(position).is_chk); }else{ my_item = (item_apk)convertView; my_item.txt_name.setText(list_data.get(position).txt_name.getText());my_item.txt_flag.setText(list_data.get(position).txt_flag.getText());my_item.img_apk.setImageDrawable(list_data.get(position).img_apk.getDrawable());} CheckBox chk_item = (CheckBox) my_item.chk_apk;chk_item.setOnClickListener(this);if (list_data.get(position).is_chk)Log.i(String.valueOf(position) + ".is_chk=", "true");elseLog.i(String.valueOf(position) + ".is_chk=", "false");chk_item.setChecked(list_data.get(position).is_chk);chk_item.setTag(position);return my_item; } public void addItem(String txt_name, String txt_flag, Drawable ico_apk, String str_name, Boolean bol_chk){ list_data.add(new item_apk(ctx,txt_name,txt_flag,ico_apk,str_name,bol_chk)); }@Overridepublic void onClick(View v) {// TODO Auto-generated method stubCheckBox c = (CheckBox) v;int pos = Integer.parseInt(v.getTag().toString());list_data.get(pos).is_chk = c.isChecked();} }//apk列表的一行class item_apk extends LinearLayout{public CheckBox chk_apk;public TextView txt_name; public TextView txt_flag;public ImageView img_apk; public String item_pak;public boolean is_chk; public item_apk(Context ctx, String item_name, String item_flag, Drawable item_draw, String str_name, Boolean bol_chk){ super(ctx);this.setOrientation(HORIZONTAL);int hei = 60;chk_apk = new CheckBox(ctx);addView(chk_apk,new LinearLayout.LayoutParams((int)(MainActivity.wid_scr*0.2),hei)); img_apk = new ImageView(ctx);img_apk.setImageDrawable(item_draw);addView(img_apk,new LinearLayout.LayoutParams((int)(MainActivity.wid_scr*0.2),hei)); txt_name = new TextView(ctx);txt_name.setText(item_name);addView(txt_name,new LinearLayout.LayoutParams((int)(MainActivity.wid_scr*0.4),hei)); txt_flag = new TextView(ctx);txt_flag.setText(item_flag);addView(txt_flag,new LinearLayout.LayoutParams((int)(MainActivity.wid_scr*0.2),hei));item_pak = str_name;is_chk = bol_chk; }}

一共实现了三个类:apk、list_apk、item_apk。apk是整个Activity的类,list_apk是列表的适配器类,item_apk是列表中一行的类。list_apk的list_data是重要的变量,它记录了每一个包的信息,如包名、是否是系统应用、是否被选中等。

点击“卸载”按钮时,遍历list_data的所有元素,判断是否被选中,如果被选中,就删除。

运行效果如下:

实现Android包的批量删除

实现Android包的批量删除

实现Android包的批量删除

实现Android包的批量删除

实现Android包的批量删除

实现Android包的批量删除

可见,选中的两个包已经被删除。

更多相关文章

  1. 【Android】获取WIFI列表简单小例子
  2. android读写文件
  3. Android内核的根文件系统
  4. android获取文件目录
  5. Android代码实现APK文件的安装与卸载
  6. Android 文件实现断点上传

随机推荐

  1. Android(安卓)自动滚动的GridView
  2. android 呼入电话的监听(来电监听)
  3. 2011.08.15(2)——— android audioManager
  4. android中The connection to adb is down
  5. C#开发android应用实战 源码
  6. 初涉Android之ContentProvider
  7. 2011.09.07(3)——— android 跨进程通信之
  8. android去掉标题的方法
  9. Android(安卓)4.0 HttpUrlConnection的ge
  10. Android(安卓)解屏代码