【android学习】获取手机已安装程序
2015-09-08 12:23
411 查看
首先用来获取手机的内存剩余空间,以及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; } @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<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; } @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
<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>
相关文章推荐
- android应用的安装之静默安装
- android动画详解
- 细说Android事件传递机制(dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent)
- ADB not responding. If you'd like to retry, then please manually kill "adb.exe" and click 'Restart'
- Kotlin For Android 示例代码实战
- Kotlin For Android 示例代码实战
- Android-Socket基于UDP传输
- Android 发送UDP包
- android 组建添加透明度
- Android项目开发时版本选择
- Android控制软键盘的弹出和隐藏
- Android控制软键盘的弹出和隐藏
- android studio中各工具的版本关系
- XX程序媛学习笔记--Cordova(PhoneGap)通过plugins调用Android Native并回调
- Android Java app 程序运行入口判断方法
- Android中Looper的实现原理,为什么调用Looper.prepare()就在当前线程关联了一个Looper对象,它是如何实现的。
- Android中Looper的实现原理
- 【转】android 蓝牙
- Android 项目中各种小技巧
- Android的一些要点记录