1)创建AppInfo类,代码如下
package com.example.installedapp;
import android.graphics.drawable.Drawable;
public class AppInfo {
/*应用程序名称*/
private String appName="";
public void SetAppName(String _appName){
this.appName=_appName;
}
public String GetAppName(){
return this.appName;
}
/*包名称*/
private String packageName="";
public void SetPackageName(String _packageName){
this.packageName=_packageName;
}
public String GetPackageName(){
return this.packageName;
}
/*版本名称*/
private String versionName="";
public void SetVersionName(String _versionName){
this.versionName=_versionName;
}
public String GetVersionName(){
return this.versionName;
}
/*版本编号*/
private int versionCode=0;
public void SetVersionCode(int _versionCode){
this.versionCode=_versionCode;
}
public int GetVersionCode(){
return this.versionCode;
}
/*图标*/
private Drawable appIcon=null;
public void SetAppIcon(Drawable _appIcon){
this.appIcon=_appIcon;
}
public Drawable GetAppIcon(){
return this.appIcon;
}
}
2)创建applist.xml作为自定义ListView的样式代码如下
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:id="@+id/appIcon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/appName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginTop="5dp"
android:text="TextView" />
<TextView
android:id="@+id/packageName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginTop="5dp"
android:text="TextView" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/versionCode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginTop="5dp"
android:text="TextView" />
<TextView
android:id="@+id/versionName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginTop="5dp"
android:text="TextView" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
3)创建MyListAdapter.java作为自定ListAdapeter代码如下
package com.example.installedapp;
import java.util.ArrayList;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
class MyListAdapter extends BaseAdapter {
private ArrayList<AppInfo> apps=null;
private Context context=null;
public MyListAdapter(ArrayList<AppInfo> _apps,Context _context)
{
this.apps=_apps;
this.context=_context;
}
public int getCount() {
//设置绘制数量
return apps.size();
}
@Override
public boolean areAllItemsEnabled() {
return false;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView appIconImageView=null;
TextView appNameTextView=null;
TextView packageNameTextView=null;
TextView versionCodeTextView=null;
TextView versionNameTextView=null;
if (convertView == null || position < apps.size()) {
convertView = LayoutInflater.from(context).inflate(
R.layout.applist, null);
appIconImageView = (ImageView) convertView.findViewById(R.id.appIcon);
appNameTextView = (TextView) convertView.findViewById(R.id.appName);
packageNameTextView = (TextView) convertView.findViewById(R.id.packageName);
versionCodeTextView = (TextView) convertView.findViewById(R.id.versionCode);
versionNameTextView = (TextView) convertView.findViewById(R.id.versionName);
}
/*图标*/
appIconImageView.setImageDrawable(apps.get(position).GetAppIcon());
/*应用程序名称*/
appNameTextView.setText(apps.get(position).GetAppName());
/*包名称*/
packageNameTextView.setText(apps.get(position).GetPackageName());
/*版本编号*/
versionCodeTextView.setText(Integer.toString(apps.get(position).GetVersionCode()));
/*版本名称*/
versionNameTextView.setText(apps.get(position).GetVersionName());
return convertView;
}
}
4)修改MainActivity.java代码将自定ListAdapeter绑定给ListView代码如下
package com.example.installedapp;
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.app.Activity;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.view.Menu;
import android.widget.ListView;
public class MainActivity extends Activity {
private ListView listView1=null;
private MyListAdapter adapter=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView1=(ListView)findViewById(R.id.listView1);
ArrayList<AppInfo> items=GetApps();
adapter=new MyListAdapter(items, MainActivity.this);
listView1.setAdapter(adapter);
}
/*获取非系统应用信息*/
private ArrayList<AppInfo> GetApps(){
ArrayList<AppInfo> items=new ArrayList<AppInfo>();
List<PackageInfo> packages=getPackageManager().getInstalledPackages(0);
if(packages.size()>0){
for (PackageInfo packageInfo : packages) {
AppInfo item=new AppInfo();
/*图标*/
item.SetAppIcon(packageInfo.applicationInfo.loadIcon(getPackageManager()));
/*应用程序名称*/
item.SetAppName(packageInfo.applicationInfo.loadLabel(getPackageManager()).toString());
/*包名称*/
item.SetPackageName(packageInfo.packageName);
/*版本编号*/
item.SetVersionCode(packageInfo.versionCode);
/*版本名称*/
item.SetVersionName(packageInfo.versionName);
//只显示非系统应用程序
if((packageInfo.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM)==0){
items.add(item);
}
}
}
return items;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}