当前位置: 代码迷 >> Android >> Android程序管理器容易实现
  详细解决方案

Android程序管理器容易实现

热度:32   发布时间:2016-04-28 06:00:42.0
Android程序管理器简单实现

应用功能:

列出手机所有应用,点击下方按钮,对应用进行apk大小由大到小排序,再次点击则由小到大排序。

效果图:


首先是布局文件: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"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:weightSum="2"    tools:context=".MainActivity" >    <TextView        android:id="@+id/tv_1"        android:layout_width="fill_parent"        android:layout_height="120dp"        android:layout_weight="1"        android:text="姓名:cofen"        android:textSize="15sp" />    <ListView        android:id="@+id/list_app_item"        android:layout_width="fill_parent"        android:layout_height="match_parent"        android:layout_weight="1"        android:cacheColorHint="@android:color/transparent" >    </ListView>    <Button        android:layout_gravity="bottom"        android:id="@+id/bt_1"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:layout_weight="1"        android:onClick="click"        android:text="按照程序apk大小排序" /></LinearLayout>

list_app_item.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="wrap_content" >    <ImageView        android:id="@+id/iv_icon"        android:layout_width="50dip"        android:layout_height="50dip"        android:src="@drawable/app" />    <TextView        android:id="@+id/tv_name"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginLeft="3dip"        android:layout_marginTop="3dip"        android:text="软件名称"        android:textColor="#000000"        android:layout_toRightOf="@id/iv_icon"        android:textSize="18sp" />    <TextView        android:id="@+id/tv_location"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@id/tv_name"        android:layout_marginLeft="3dip"        android:layout_marginTop="1dip"        android:text="程序大小"        android:textColor="#99000000"        android:layout_toRightOf="@id/iv_icon"        android:textSize="16sp" /></RelativeLayout>

AppInfo.java  用于保存和获取Item数据

import android.graphics.drawable.Drawable;public class AppInfo {	private Drawable icon;	private String name;	private String packageName;	private String apksize;	public Drawable getIcon() {		return icon;	}	public void setIcon(Drawable icon) {		this.icon = icon;	}	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public String getPackageName() {		return packageName;	}	public void setPackageName(String packageName) {		this.packageName = packageName;	}	public String getApksize() {		return apksize;	}	public void setApksize(String apksize) {		this.apksize = apksize;	}		@Override	public String toString() {		return "AppInfo [name=" + name + ", apksize=" + apksize + "]";	}	}

AppInfoProvider.java   用于得到应用的图标,名称,应用的路径和大小

import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.util.ArrayList;import java.util.List;import android.content.Context;import android.content.pm.ApplicationInfo;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.graphics.drawable.Drawable;/** * 得到应用的图标,名称,应用的路径和大小 *  * @author lenovo *  */public class AppInfoProvider {	private static int size;	private static int len;	public static List<AppInfo> getAllAppInfo(Context context) {		ArrayList<AppInfo> appInfos = new ArrayList<AppInfo>();		// 得到包管理器		PackageManager pm = context.getPackageManager();		List<PackageInfo> packInfos = pm.getInstalledPackages(0);		for (PackageInfo info : packInfos) {			AppInfo appInfo = new AppInfo();			// 得到包的名字			String packageName = info.packageName;			// 得带应用图标			Drawable icon = info.applicationInfo.loadIcon(pm);			// 得到应用名称			String name = (String) info.applicationInfo.loadLabel(pm);			// 得到应用的路径			String sourceDir = info.applicationInfo.sourceDir;			//得到应用的大小			File file = new File(sourceDir);			long length = file.length();			appInfo.setApksize(length + "");			appInfo.setIcon(icon);			appInfo.setName(name);			appInfo.setPackageName(packageName);			// 应用程序的标志,可以是任意标志的组合			int flags = info.applicationInfo.flags;			appInfos.add(appInfo);		}		return appInfos;	}}

MainActivity.java 

import java.util.Collections;import java.util.Comparator;import java.util.List;import java.util.Map;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView;public class MainActivity extends Activity {	private MyAdapter adapter;	private List<AppInfo> infos;	private ListView list_app_item;	private int flag = 0;	private Handler handler = new Handler() {		@Override		public void handleMessage(Message msg) {			adapter = new MyAdapter();			list_app_item.setAdapter(adapter);			// 刷新页面			adapter.notifyDataSetChanged();		}	};	private Map<String, Integer> mp;	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_main);		list_app_item = (ListView) findViewById(R.id.list_app_item);		infos = AppInfoProvider.getAllAppInfo(MainActivity.this);		// 发一个消息更新界面		handler.sendEmptyMessage(0);	}	private class MyAdapter extends BaseAdapter {		@Override		public int getCount() {			return infos.size();		}		@Override		public Object getItem(int position) {			return null;		}		@Override		public long getItemId(int position) {			return 0;		}		@Override		public View getView(int position, View convertView, ViewGroup parent) {			AppInfo info = infos.get(position);			View view = null;			if (convertView != null) {				view = convertView;			} else {				view = View.inflate(MainActivity.this, R.layout.list_app_item,						null);			}			TextView tv_name = (TextView) view.findViewById(R.id.tv_name);			ImageView iv_icon = (ImageView) view.findViewById(R.id.iv_icon);			TextView tv_location = (TextView) view					.findViewById(R.id.tv_location);			String apksize = info.getApksize();			String name = info.getName();			tv_location.setText(apksize);			iv_icon.setImageDrawable(info.getIcon());			tv_name.setText(name);			return view;		}	}	public void click(View v) {		if (flag == 0) {			Collections.sort(infos, new strlenComparator());			flag = 1;			handler.sendEmptyMessage(0);					}else if(flag == 1){			Collections.sort(infos, new strlenComparator2());			flag = 0;			handler.sendEmptyMessage(0);		}		// 刷新页面		adapter.notifyDataSetChanged();	}	// 定义比较器,由大到小	class strlenComparator implements Comparator<AppInfo> {		@Override		public int compare(AppInfo lhs, AppInfo rhs) {			String size1 = lhs.getApksize();			Integer valueOf1 = Integer.valueOf(size1);			String size2 = rhs.getApksize();			Integer valueOf2 = Integer.valueOf(size2);			if (valueOf1 > valueOf2)				return -1;			if (valueOf2 > valueOf1)				return 1;			return valueOf1.compareTo(valueOf2);		}	}			// 定义比较器,由小到大		class strlenComparator2 implements Comparator<AppInfo> {			@Override			public int compare(AppInfo lhs, AppInfo rhs) {				String size1 = lhs.getApksize();				Integer valueOf1 = Integer.valueOf(size1);				String size2 = rhs.getApksize();				Integer valueOf2 = Integer.valueOf(size2);				if (valueOf1 > valueOf2)					return 1;				if (valueOf2 > valueOf1)					return -1;				return valueOf1.compareTo(valueOf2);			}		}}


  相关解决方案