【android学习】获取手机已安装程序

来源:互联网 发布:域名 权利冲突 伪命题 编辑:程序博客网 时间:2024/05/20 05:27

首先用来获取手机的内存剩余空间,以及SD的剩余空间。

机械硬盘的内存=一个扇片大小×总的扇片个数。

SDCard可用空间 = 一个扇片大小×SDCard剩余的扇片个数

/** * 获取某个目录的可用空间 * @param path * @return */private long getAvialSpace(String path){//String path = Environment.getExternalStorageDirectory().getPath();        StatFs stat = new StatFs(path);        long blockSize = stat.getBlockSize();//获取分区的大小        long totalBlocks = stat.getBlockCount();//获取分区的个数        long availableBlocks = stat.getAvailableBlocks();//获取可用区块的个数        return blockSize*availableBlocks;}

获得安装应用程序的信息

/** * 获取所有的安装的应用程序信息 * @param context * @return */private List<AppInfo> getAppInfo(Context context){PackageManager pm = context.getPackageManager();List<PackageInfo> Packages = pm.getInstalledPackages(0);List<AppInfo> appInfos = new ArrayList<AppInfo>();for (PackageInfo packageInfo : Packages) {String packageName = packageInfo.packageName;Drawable icon = packageInfo.applicationInfo.loadIcon(pm);String name = packageInfo.applicationInfo.loadLabel(pm).toString();AppInfo appInfo = new AppInfo();appInfo.setIcon(icon);appInfo.setName(name);appInfo.setPackagename(packageName);appInfos.add(appInfo);}return appInfos;}

下面是整个应用程序的代码

MainActivity.java

public class MainActivity extends ActionBarActivity {TextView cache;TextView sdcard;ListView listView;List<AppInfo> infos;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);         findID();        infos = getAppInfo(this);        listView.setAdapter(new AppManagerAdapter(infos));    }    /**     * 查找ID     */private void findID() {cache = (TextView) findViewById(R.id.cache);sdcard = (TextView) findViewById(R.id.sdcard);listView = (ListView) findViewById(R.id.listview);long sdSize = getAvialSpace(Environment.getExternalStorageDirectory().getPath());long romSize = getAvialSpace(Environment.getDataDirectory().getPath());sdcard.setText(""+Formatter.formatFileSize(this, sdSize));cache.setText(""+Formatter.formatFileSize(this, romSize));}/** * 适配器 * @author zkq */private class AppManagerAdapter extends BaseAdapter{List<AppInfo> infoList;public AppManagerAdapter(List<AppInfo> list) {this.infoList = list;}@Overridepublic int getCount() {return infoList.size();}@Overridepublic Object getItem(int arg0) {// TODO Auto-generated method stubreturn arg0;}@Overridepublic long getItemId(int arg0) {// TODO Auto-generated method stubreturn arg0;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder  holder ;if (convertView == null) {holder = new ViewHolder();convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.item, null);holder.imageView = (ImageView) convertView.findViewById(R.id.imageview);holder.name = (TextView) convertView.findViewById(R.id.name);holder.pack = (TextView) convertView.findViewById(R.id.pack);convertView.setTag(holder);}else {holder = (ViewHolder) convertView.getTag();}holder.imageView.setImageDrawable(infoList.get(position).getIcon());holder.name.setText(infoList.get(position).getName());holder.pack.setText(infoList.get(position).getPackagename());return convertView;}private class ViewHolder{ImageView imageView ;TextView name;TextView pack;}}/** * 获取某个目录的可用空间 * @param path * @return */private long getAvialSpace(String path){//String path = Environment.getExternalStorageDirectory().getPath();        StatFs stat = new StatFs(path);        long blockSize = stat.getBlockSize();//获取分区的大小        long totalBlocks = stat.getBlockCount();//获取分区的个数        long availableBlocks = stat.getAvailableBlocks();//获取可用区块的个数        return blockSize*availableBlocks;}    /** * 获取所有的安装的应用程序信息 * @param context * @return */private List<AppInfo> getAppInfo(Context context){PackageManager pm = context.getPackageManager();List<PackageInfo> Packages = pm.getInstalledPackages(0);List<AppInfo> appInfos = new ArrayList<AppInfo>();for (PackageInfo packageInfo : Packages) {String packageName = packageInfo.packageName;Drawable icon = packageInfo.applicationInfo.loadIcon(pm);String name = packageInfo.applicationInfo.loadLabel(pm).toString();AppInfo appInfo = new AppInfo();appInfo.setIcon(icon);appInfo.setName(name);appInfo.setPackagename(packageName);appInfos.add(appInfo);}return appInfos;}    }


AppInfo.java

public class AppInfo {private Drawable icon;public Drawable getIcon() {return icon;}@Overridepublic String toString() {return "AppInfo [name=" + name + ", packagename=" + packagename + "]";}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;}private String name;private String packagename;}

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:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    android:orientation="vertical"    tools:context="com.example.appmanager.MainActivity" >    <RelativeLayout         android:layout_width="wrap_content"        android:layout_height="wrap_content"        >            <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:text="内存可用" />    <TextView         android:id="@+id/cache"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentRight="true"        android:text="128M"        />    </RelativeLayout>        <RelativeLayout         android:layout_width="wrap_content"        android:layout_height="wrap_content"        >            <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:text="SDcard可用" />    <TextView         android:id="@+id/sdcard"         android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentRight="true"        android:text="128M"        />    </RelativeLayout>                <ListView         android:id="@+id/listview"        android:layout_width="match_parent"        android:layout_height="wrap_content"        ></ListView></LinearLayout>

item.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="horizontal" >    <ImageView        android:id="@+id/imageview"        android:layout_width="50dp"        android:layout_height="50dp"        android:src="@drawable/ic_launcher" />    <LinearLayout        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:orientation="vertical" >        <TextView            android:id="@+id/name"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentLeft="true"            android:text="内存可用" />        <TextView            android:id="@+id/pack"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentRight="true"            android:text="128M" />    </LinearLayout></LinearLayout>



0 0