package scl.uninstallapp;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
private ArrayList<AppInfo> list;
private ListView listView;
protected AdapterApp adapterApp;
@Override
protected void onRestart() {
System.out.println("onRestart");
adapterApp.notifyDataSetChanged();
super.onRestart();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list = getListApp();//获取非系统安装的软件信息
listView = (ListView) findViewById(R.id.listView1);
adapterApp = new AdapterApp(MainActivity.this,list);
listView.setDividerHeight(2);
if(list !=null)
{
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
AppInfo app=list.get(position);
// System.out.println(app.getAppName()+"--"+app.getPackageName()+"--"+app.getVersionName()+"--"+app.getVersionCode());
String message = app.getAppName()+","+app.getPackageName()+","+app.getVersionName()+","+app.getVersionCode();
new AlertDialog.Builder(MainActivity.this).setTitle("软件信息")
.setMessage(message)
.setPositiveButton("OK", null).create().show();
}
});
listView.setAdapter(adapterApp);
}
}
private ArrayList<AppInfo> getListApp() {
ArrayList<AppInfo> arrayList = new ArrayList<AppInfo>();
List<PackageInfo> listPackages = getPackageManager()
.getInstalledPackages(0);
for (PackageInfo packageInfo : listPackages) {
// System.out.println(packageInfo.applicationInfo.loadLabel(getPackageManager()).toString()
// +" / "+packageInfo.applicationInfo.flags
// +" / "+ApplicationInfo.FLAG_SYSTEM);
// System.out.println((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM));
if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) {
AppInfo appInfo = new AppInfo(packageInfo.applicationInfo
.loadLabel(getPackageManager()).toString(),
packageInfo.packageName, packageInfo.versionName,
packageInfo.versionCode,
packageInfo.applicationInfo
.loadIcon(getPackageManager()));
arrayList.add(appInfo);
}
}
return arrayList;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
class AdapterApp extends BaseAdapter{
private LayoutInflater mlayoutInflater;
private List<AppInfo> list;
private Context context;
public AdapterApp(Context context, ArrayList<AppInfo> list) {
mlayoutInflater = LayoutInflater.from(context);
this.list = list;
this.context = context;
}
public int getCount() {
return list.size();
}
public Object getItem(int position) {
return list.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
final AppInfo appUnit=list.get(position);
if(convertView == null || convertView.getTag() == null){
convertView = mlayoutInflater.inflate(R.layout.list_item01, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
holder.appIcon.setImageDrawable(appUnit.getAppIcon());
holder.appName.setText(appUnit.getAppName());
// System.out.println("------"+appUnit.getPackageName());
holder.btnUninstall.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// System.out.println("package:"+appUnit.getPackageName());
Uri packeageUri = Uri.parse("package:"+appUnit.getPackageName());
Intent intent = new Intent(Intent.ACTION_DEFAULT, packeageUri);
context.startActivity(intent);
list.remove(appUnit);
}
});
return convertView;
}
private class ViewHolder{
ImageView appIcon;
TextView appName;
Button btnUninstall;
public ViewHolder(View view) {
this.appIcon = (ImageView) view.findViewById(R.id.app_icon);
this.appName = (TextView) view.findViewById(R.id.app_name);
this.btnUninstall = (Button) view.findViewById(R.id.btn_uninstall);
}
}
}
class AppInfo{
private String appName;
private String packageName;
private String versionName;
private int versionCode;
private Drawable appIcon;
public AppInfo() {
super();
}
public AppInfo(String appName, String packageName, String versionName,
int versionCode, Drawable appIcon) {
super();
this.appName = appName;
this.packageName = packageName;
this.versionName = versionName;
this.versionCode = versionCode;
this.appIcon = appIcon;
}
public String getAppName() {
return appName;
}
public void setAppName(String appName) {
this.appName = appName;
}
public String getPackageName() {
return packageName;
}
public void setPackageName(String packageName) {
this.packageName = packageName;
}
public String getVersionName() {
return versionName;
}
public void setVersionName(String versionName) {
this.versionName = versionName;
}
public int getVersionCode() {
return versionCode;
}
public void setVersionCode(int versionCode) {
this.versionCode = versionCode;
}
public Drawable getAppIcon() {
return appIcon;
}
public void setAppIcon(Drawable appIcon) {
this.appIcon = appIcon;
}
}
activity_man.xml 加一个listview
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
list_item01.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:descendantFocusability="blocksDescendants" >
<Button
android:id="@+id/btn_uninstall"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:focusable="false"
android:text="@string/btn_uninstall" />
<ImageView
android:id="@+id/app_icon"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignBottom="@+id/app_name"
android:layout_alignParentLeft="true" />
<TextView
android:id="@+id/app_name"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:layout_alignParentTop="true"
android:layout_toLeftOf="@+id/btn_uninstall"
android:layout_toRightOf="@+id/app_icon" />
</RelativeLayout>