首先用来获取手机的内存剩余空间,以及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 getAppInfo(Context context){
PackageManager pm = context.getPackageManager();
List Packages = pm.getInstalledPackages(0);
List appInfos = new ArrayList();
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 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 infoList;
public AppManagerAdapter(List list) {
this.infoList = list;
}
@Override
public int getCount() {
return infoList.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public 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 getAppInfo(Context context){
PackageManager pm = context.getPackageManager();
List Packages = pm.getInstalledPackages(0);
List appInfos = new ArrayList();
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;
}
@Override
public 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
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" >
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="内存可用" />
android:id="@+id/cache"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="128M"
/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="SDcard可用" />
android:id="@+id/sdcard"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="128M"
/>
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
item.xml
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
android:id="@+id/imageview"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/ic_launcher" />
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="内存可用" />
android:id="@+id/pack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="128M" />