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

本文介绍了一个Android应用,它使用TabHost和ListView展示系统及用户应用程序信息。通过AppInfoProvider获取所有安装应用的包信息,判断是否为用户应用,然后使用自定义的AppInfoAdapter将应用信息显示在ListView上。AppInfo类用于存储应用的名称、版本、图标等信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

效果图:

93c90374d8afbddc9abd8eb2b06b3c3b.png

2c361d02b7e3758501ebee4bec4ca9e8.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 appInfos;

/**

* 获取所有应用程序的信息

*

* @return AppInfo集合对象

*/

public List getAllAppInfo()

{

// 获取应用程序包的管理者

PackageManager pm = context.getPackageManager();

// 获取所有安装的程序的包信息对象

List packageInfos = pm.getInstalledPackages(0);

// 新建一个AppInfo集合,用来存放AppInfo类的对象

appInfos = new ArrayList();

AppInfo appInfo = null;

// for循环,遍历集合List

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 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()

{

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();

appInfoProvider = new AppInfoProvider(context);

// 获取应用程序数据数据

List 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();

appInfoProvider = new AppInfoProvider(context);

List 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;

}

}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值