软件管理功能-----卸载功能
app的下载链接:https://pan.baidu.com/s/15yZV8ueYd7SWa1k9fHPQ3Q 密码:2zpm
app jar包链接:https://pan.baidu.com/s/1lb5VVY6qRy1VAw7mthCkgA 密码:i177
软件管理功能
页面:展示系统和用户软件,并且每一项都可进行点击操作
1.卸载
2.启动
3.设置
主页面展示
AppBean对象类,里面包含apk的信息
package com.bw.antiVirusApp.bean; import android.graphics.drawable.Drawable; public class AppBean { private String appName; //apk的名字 private Drawable icon; //apk的图标 private long size; //apk的大小 private boolean isSd; //是否存在sd卡上 private boolean isSystem; //判断是否使系统pak private String packName; //apk的包名 private String akPath; //apk的安装路径 public String getAkPath() { return akPath; } public void setAkPath(String akPath) { this.akPath = akPath; } public String getPackName() { return packName; } public void setPackName(String packName) { this.packName = packName; } public String getAppName() { return appName; } public void setAppName(String appName) { this.appName = appName; } public Drawable getIcon() { return icon; } public void setIcon(Drawable icon) { this.icon = icon; } public long getSize() { return size; } public void setSize(long size) { this.size = size; } public boolean isSd() { return isSd; } public void setSd(boolean isSd) { this.isSd = isSd; } public AppBean(String appName, Drawable icon, long size, boolean isSd) { super(); this.appName = appName; this.icon = icon; this.size = size; this.isSd = isSd; } public AppBean() { super(); } public boolean isSystem() { return isSystem; } public void setSystem(boolean isSystem) { this.isSystem = isSystem; } }
获取手机上的所有的apk,并且返回装有apk信息的list集合
package com.bw.antiVirusApp.engine; import java.io.File; import java.util.ArrayList; import java.util.List; import com.bw.antiVirusApp.bean.AppBean; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.os.Environment; public class AppManagerEngine { /* * 获取SD卡的可用空间 * */ public static long getSDAvial(Context context){ long sdAvial=0; //获取SD卡的目录 File externalStorageDirectory = Environment.getExternalStorageDirectory(); //剩余空间的字节数 sdAvial=externalStorageDirectory.getFreeSpace(); return sdAvial; } /* *获取手机的剩余空间 * */ public static long getRomAvial(Context context){ long romAvial=0; //获取手机的目录 File dataDirectory = Environment.getDataDirectory(); romAvial=dataDirectory.getFreeSpace(); return romAvial; } /* * 获取手机中的所有软件 * */ public static List<AppBean> getALLApks(Context context){ List<AppBean> list=new ArrayList<AppBean>(); //获取包管理器 PackageManager pm=context.getPackageManager(); //1、获取所有安装的apk List<ApplicationInfo> installedApplications = pm.getInstalledApplications(0); for (ApplicationInfo applicationInfo : installedApplications) { AppBean bean=new AppBean(); //获取apk的名字,加空“”,转化成字符串,loadLabel:清单文件里面apk的名字是loadLabel命名的 bean.setAppName(applicationInfo.loadLabel(pm)+""); //获取图标 bean.setIcon(applicationInfo.loadIcon(pm)); //获取文件夹路径的大小 String sourceDir = applicationInfo.sourceDir; File file=new File(sourceDir); bean.setSize(file.length()); //该程序拥有的所有属性 int flags = applicationInfo.flags; //是否是系统自带apk if ((flags & applicationInfo.FLAG_SYSTEM)!=0) { //系统自带APP bean.setSystem(true); }else { bean.setSystem(false); } //是否在sd卡上 if ((flags & applicationInfo.FLAG_EXTERNAL_STORAGE)!=0) { //系统自带APP bean.setSd(true); }else { bean.setSd(false); } //获取包名 bean.setPackName(applicationInfo.packageName); bean.setAkPath(applicationInfo.sourceDir); list.add(bean); } return list; } }
主页面所需的方法
1 public class AppmanagerActivity extends Activity 2 { 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 initView();//初始化控件 7 initData();//初始化数据 8 initEvent();//初始化事件 9 initPopupWindow();//显示弹窗 10 initRemoveReceiver();//移除注册的广播 11 } 12 }
展示listView数据的适配器
1 public class MyAdpater extends BaseAdapter { 2 3 @Override 4 public int getCount() { 5 // TODO Auto-generated method stub 6 //titl也算一项,系统软件和用户软件描述的两个TextView也算在listview的每一项里面 7 return sysApps.size()+1+userApps.size()+1; 8 } 9 10 @Override 11 public AppBean getItem(int position) { 12 // TODO Auto-generated method stub 13 AppBean bean=null; 14 if (position<=userApps.size()) { 15 bean=userApps.get(position-1); 16 }else { 17 bean=sysApps.get(position-userApps.size()-1-1); 18 } 19 return bean; 20 } 21 22 @Override 23 public long getItemId(int position) { 24 // TODO Auto-generated method stub 25 return 0; 26 } 27 28 @Override 29 public View getView(int position, View convertView, ViewGroup parent) { 30 // TODO Auto-generated method stub 31 if (position==0) 32 { 33 TextView tv_userTable=new TextView(getApplicationContext()); 34 tv_userTable.setText("用户软件:"+userApps.size()); 35 tv_userTable.setTextColor(Color.WHITE); 36 tv_userTable.setBackgroundColor(Color.GRAY); 37 return tv_userTable; 38 } 39 else if (position==userApps.size()+1) 40 { 41 TextView tv_systemTable=new TextView(getApplicationContext()); 42 tv_systemTable.setText("系统软件:"+sysApps.size()); 43 tv_systemTable.setTextColor(Color.WHITE); 44 tv_systemTable.setBackgroundColor(Color.GRAY); 45 return tv_systemTable; 46 } 47 else 48 { 49 ViewHolder holder=new ViewHolder(); 50 if (convertView!=null && convertView instanceof RelativeLayout) { 51 holder=(ViewHolder) convertView.getTag(); 52 }else { 53 convertView=View.inflate(getApplicationContext(), R.layout.item_appmanager_listview_item, null); 54 holder.iv_icon=(ImageView) convertView.findViewById(R.id.iv_appmanager_listview_item_icon); 55 holder.tv_title=(TextView) convertView.findViewById(R.id.tv_appmanager_listview_item_title); 56 holder.tv_location=(TextView) convertView.findViewById(R.id.tv_appmanager_listview_item_location); 57 holder.tv_size=(TextView) convertView.findViewById(R.id.tv_appmanager_listview_item_size); 58 convertView.setTag(holder); 59 } 60 AppBean bean=getItem(position); 61 holder.iv_icon.setImageDrawable(bean.getIcon()); 62 if (bean.isSd()) { 63 holder.tv_location.setText("sd存储"); 64 }else { 65 holder.tv_location.setText("手机空间存储"); 66 } 67 holder.tv_title.setText(bean.getAppName()); 68 holder.tv_size.setText(Formatter.formatFileSize(getApplicationContext(),bean.getSize())); 69 } 70 return convertView; 71 72 } 73 }
//优化listview
74 public class ViewHolder { 75 ImageView iv_icon; 76 TextView tv_title; 77 TextView tv_location; 78 TextView tv_size; 79 }
页面显示主要是initView()和initData()方法,需要查找控件和装在数据到 集合中,查找数据需要
1 private void initView() { 2 // TODO Auto-generated method stub 3 setContentView(R.layout.activity_appmanager); 4 tv_romsize=(TextView) findViewById(R.id.tv_appmanager_romsize); 5 tv_sdsize=(TextView) findViewById(R.id.tv_appmanager_sdsize); 6 tv_listview_label=(TextView) findViewById(R.id.tv_listview_label); 7 //显示数据的view 8 lv_appdatas=(ListView)findViewById(R.id.lv_appmanager_appdatas); 9 pb_loading=(ProgressBar)findViewById(R.id.pb_appmanager_loading); 10 sysApps=new ArrayList<AppBean>(); 11 userApps=new ArrayList<AppBean>(); 12 myAdpater=new MyAdpater(); 13 lv_appdatas.setAdapter(myAdpater); 14 pm=getPackageManager(); 15 }
1 Handler handler=new Handler(){ 2 @Override 3 public void handleMessage(Message msg) { 4 // TODO Auto-generated method stub 5 super.handleMessage(msg); 6 switch (msg.what) { 7 case Loading: 8 pb_loading.setVisibility(View.VISIBLE); 9 lv_appdatas.setVisibility(View.GONE); 10 break; 11 case Finsh: 12 pb_loading.setVisibility(View.GONE); 13 lv_appdatas.setVisibility(View.VISIBLE); 14 tv_listview_label.setText("用户软件:"+userApps.size()); 15 tv_listview_label.setVisibility(View.VISIBLE); 16 tv_romsize.setText("手机内存可用空间:"+Formatter.formatFileSize(getApplicationContext(), romAvial)); 17 tv_sdsize.setText("SD卡可用空间:"+Formatter.formatFileSize(getApplicationContext(), sdAvial)); 18 myAdpater.notifyDataSetChanged(); 19 break; 20 21 } 22 } 23 }; 24 25 /* 26 * 加载数据写到线程里面 27 */ 28 private void initData() { 29 // TODO Auto-generated method stub 30 new Thread(){ 31 public void run() { 32 //1、开始加载数,发送消息让界面显示进度 33 34 handler.obtainMessage(Loading).sendToTarget(); 35 SystemClock.sleep(1000); 36 sysApps.clear(); 37 userApps.clear(); 38 //2、获取数据 39 List<AppBean> beans=AppManagerEngine.getALLApks(getApplicationContext()); 40 for (AppBean appBean : beans) 41 { 42 if (appBean.isSystem()) { 43 sysApps.add(appBean); 44 }else { 45 userApps.add(appBean); 46 } 47 romAvial = AppManagerEngine.getRomAvial(getApplicationContext()); 48 sdAvial = AppManagerEngine.getSDAvial(getApplicationContext()); 49 } 50 //3、发送消息去显示数据 51 handler.obtainMessage(Finsh).sendToTarget(); 52 super.run(); 53 }; 54 }.start(); 55 }
initEvent()主要处理是标识用户软件还是系统软件哪两个TextView的显示
private void initEvent() { // TODO Auto-generated method stub lv_appdatas.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub if (position==0|| position==userApps.size()+1) { return; } clickbean=(AppBean) lv_appdatas.getItemAtPosition(position); int[] location=new int[2]; view.getLocationInWindow(location);//获取视图左上定点的坐标 showPopupWindows(view,location[0]+80,location[1]); } }); lv_appdatas.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // TODO Auto-generated method stub } /* * 触摸滑动,状态变化 */ @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // TODO Auto-generated method stub //firstVisibleItem:第一项内容 //visibleItemCount:当前页面有多少向 //totalItemCount:一共有多少项数据。 closePopupWindows(); if(firstVisibleItem>=userApps.size()+1) { tv_listview_label.setText("系统软件:"+sysApps.size()); } else { tv_listview_label.setText("用户软件"+userApps.size()); } } }); }
以上的代码足以显示所有软件,显示图如下:

卸载功能
1.首先要引入一个jar包:RootTools.jar。

浙公网安备 33010602011771号