获取手机系统应用程序和用户系统应用程序,获取手机ROM内存,SDCard内存大小

需求:获取手机系统应用程序和用户系统应用程序,并把他们显示到activity上


效果图:

160504827.png

160506590.png


对这个界面简单的介绍一下:

首先,整个是的一个TabHost,用来切换其Content,然后每个Content中是一个ListView,用来显示程序信息(应用程序的图片,名字,版本)。显示呢,就是为ListView设置Adapter(之前前面提到的自定义Adapter的应用),从而达到显示内容的目的。


今天的代码主要是:怎样获取应用程序信息,并且区分应用程序是系统应用程序还是用户应用程序

package cn.cbd.mobilesaft.activity.provider;
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.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import cn.cbd.mobilesaft.activity.bean.AppInfo;
/**
 * 应用程序信息提供者 用来获取系统应用程序和用户应用程序
 * @author YSY
 */
public class AppInfoProvider
{
    // 自定义一个上下文对象
    private Context context;
                                                                                                                                                                       
    // 构造函数
    public AppInfoProvider(Context context)
    {
        this.context = context;
    }
    // 定义AppInfo对象的集合
    private List<AppInfo> appInfos;
    /**
     * 获取所有应用程序的信息
     *
     * @return AppInfo集合对象
     */
    public List<AppInfo> getAllAppInfo()
    {
        // 获取应用程序包的管理者
        PackageManager pm = context.getPackageManager();
        // 获取所有安装的程序的包信息对象
        List<PackageInfo> packageInfos = pm.getInstalledPackages(0);
        // 新建一个AppInfo集合,用来存放AppInfo类的对象
        appInfos = new ArrayList<AppInfo>();
        AppInfo appInfo = null;
        // for循环,遍历集合List<PackageInfo>
        for (PackageInfo packageInfo : packageInfos)
        {
            appInfo = new AppInfo();
            // 添加应用程序的包名到appInfo
            appInfo.setPackagename(packageInfo.packageName);
            // 添加应用程序的版本号到appInfo
            appInfo.setVersion(packageInfo.versionName);
            // 获取应用程序信息对象
            ApplicationInfo applicationInfo = packageInfo.applicationInfo;
            // 添加应用程序的名称到appInfo
            appInfo.setName(applicationInfo.loadLabel(pm).toString());
            // Drawable转换为BitMap
            Drawable drawbale = applicationInfo.loadIcon(pm);
            BitmapDrawable bd = (BitmapDrawable) drawbale;
            Bitmap bm = bd.getBitmap();
            // 添加应用程序的包名到appInfo
            appInfo.setBitmap(bm);
            // 判断程序是否是用户程序或系统程序
            if (isUserApp(applicationInfo))
            {
                appInfo.setIsuserapp(true);
            } else
            {
                appInfo.setIsuserapp(false);
            }
            // 把各个appInfo对象放到appInfos集合当中
            appInfos.add(appInfo);
        }
        // 返回集合对象
        return appInfos;
    }
    /**
     * 判断该应用程序是否为用户自定义安装程序
     *
     * @param applicationInfo
     *            当前应用的包信息对象
     * @return true表示用户程序,false表示系统程序
     */
    private boolean isUserApp(ApplicationInfo applicationInfo)
    {
        if ((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1)
        {
            return false;
        } else
        {
            return true;
        }
    }
}

获取存放应用程序信息的集合后,即得到一个集合,然后自定义Adapter并把数据显示到ListView上

package cn.cbd.mobilesaft.activity;
import java.util.ArrayList;
import java.util.List;
import cn.cbd.mobilesaft.activity.adapter.AppInfoAdapter;
import cn.cbd.mobilesaft.activity.bean.AppInfo;
import cn.cbd.mobilesaft.activity.provider.AppInfoProvider;
import cn.cbd.mobilesaft.activity.utils.GetAvailableSize;
import android.app.Activity;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class UserApplication extends Activity
{
    private List<AppInfo> userAppInfos;
    private GetAvailableSize getAvailableSize;
    private TextView tv_userApplication_Memory;
    private ListView lv_userApplication;
    private AppInfoProvider appInfoProvider;
    private AppInfoAdapter adapter;
    private RelativeLayout rl_userApplication_loading;
    // private ListView userApplication;
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_userapplication);
        // 填充数据
        fillData(this);
    }
    public void fillData(final Context context)
    {
        // 开启一个异步任务
        new AsyncTask<Void, Void, Void>()
        {
            protected void onPreExecute()
            {
                // 设置第一层(加载页面)可见
                rl_userApplication_loading = (RelativeLayout) findViewById(R.id.rl_userApplication_loading);
                rl_userApplication_loading.setVisibility(View.VISIBLE);
                tv_userApplication_Memory = (TextView) findViewById(R.id.tv_userApplication_Memory);
                getAvailableSize = new GetAvailableSize(context);
                // 获取手机内存空间,和SDCard内存空间
                String getRomSize = getAvailableSize.getAvailableRomSize();
                String getSDCardSize = getAvailableSize
                        .getAvailableSDCardSize();
                CharSequence availableMemory = "ROM:" + getRomSize + "  SD:"
                        + getSDCardSize;
                tv_userApplication_Memory.setText(availableMemory);
                lv_userApplication = (ListView) findViewById(R.id.lv_userApplication);
            };
            protected Void doInBackground(Void... params)
            {
                userAppInfos = new ArrayList<AppInfo>();
                appInfoProvider = new AppInfoProvider(context);
                // 获取应用程序数据数据
                List<AppInfo> appInfos = appInfoProvider.getAllAppInfo();
                for (AppInfo appInfo : appInfos)
                {
                    // 如果是用户应用程序,添加到用户程序集合userAppInfos(下面的newnew
                    // AppInfoAdapter(context, userAppInfos)会用到)
                    if (appInfo.isIsuserapp())
                    {
                        userAppInfos.add(appInfo);
                    }
                }
                return null;
            }
            protected void onPostExecute(Void result)
            {
                // 设置第一层不可见
                rl_userApplication_loading.setVisibility(View.INVISIBLE);
                // 判断adapter是否为空
                if (adapter == null)
                {
                    adapter = new AppInfoAdapter(context, userAppInfos);
                    lv_userApplication.setAdapter(adapter);
                } else
                {
                    // 通知数据发生变化
                    adapter.notifyDataSetChanged();
                }
            };
        }.execute();
    }
}

上面这个是获取并显示用户信息的,获取显示系统应用程,判断时有所不同

protected Void doInBackground(Void... params)
            {
                systemAppInfos = new ArrayList<AppInfo>();
                appInfoProvider = new AppInfoProvider(context);
                List<AppInfo> appInfos = appInfoProvider.getAllAppInfo();
                for (AppInfo appInfo : appInfos)
                {
                    // 判断是否是系统应用程序
                    if (!appInfo.isIsuserapp())
                    {
                        systemAppInfos.add(appInfo);
                    }
                }
                return null;
            }



大家都看到,上面会用到一个AppInfo类,这个类呢使我们自己自定义的一个实体类

package cn.cbd.mobilesaft.activity.bean;
import android.graphics.Bitmap;
/**
 * 管理应用程序类 来存放所用的应用程序(用户和系统应用程序)
 *
 * @author Administrator
 *
 */
public class AppInfo
{
    // 应用程序的名称
    private String name;
    // 版本号
    private String version;
    // 包名
    private String packagename;
    // 图标
    private Bitmap bitmap;
    // 是否是用户应用程序
    private boolean isuserapp;
    // 个数
    private int appNum;
    // get和set方法
    public int getAppNum()
    {
        return appNum;
    }
    public void setAppNum(int appNum)
    {
        this.appNum = appNum;
    }
    public String getName()
    {
        return name;
    }
    public void setName(String name)
    {
        this.name = name;
    }
    public String getVersion()
    {
        return version;
    }
    public void setVersion(String version)
    {
        this.version = version;
    }
    public String getPackagename()
    {
        return packagename;
    }
    public void setPackagename(String packagename)
    {
        this.packagename = packagename;
    }
    public Bitmap getBitmap()
    {
        return bitmap;
    }
    public void setBitmap(Bitmap bitmap)
    {
        this.bitmap = bitmap;
    }
    public boolean isIsuserapp()
    {
        return isuserapp;
    }
    public void setIsuserapp(boolean isuserapp)
    {
        this.isuserapp = isuserapp;
    }
}

希望这个在获取应用程序信息方面对你们有所帮助。



你可能感兴趣的:(Adapter,packagemanager,ApplicationInfo,APP开发)