package com.qiner.appinfo;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.qiner.appinfo.R;
import android.app.Activity;
import android.app.Application;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;
public class MainActivity extends Activity {
public static final int FILTER_ALL_APP = 0; // 所有應用程序
public static final int FILTER_SYSTEM_APP = 1; // 系統程序
public static final int FILTER_THIRD_APP = 2; // 第三方應用程序
public static final int FILTER_SDCARD_APP = 3; // 安裝在SDCard的應用程序
private ListView listview = null;
private PackageManager pm;
private int filter = FILTER_ALL_APP;
private List<AppInfo> mlistAppInfo ;
private BrowseApplicationInfoAdapter browseAppAdapter = null ;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.browse_app_list);
listview = (ListView) findViewById(R.id.listviewApp);
if(getIntent()!=null){
filter = getIntent().getIntExtra("filter", 0) ;
}
mlistAppInfo = queryFilterAppInfo(filter); // 查詢所有應用程序信息
// 構建適配器,並且註冊到listView
browseAppAdapter = new BrowseApplicationInfoAdapter(this, mlistAppInfo);
listview.setAdapter(browseAppAdapter);
}
// 根據查詢條件,查詢特定的ApplicationInfo
private List<AppInfo> queryFilterAppInfo(int filter) {
pm = this.getPackageManager();
// 查詢所有已經安裝的應用程序
List<ApplicationInfo> listAppcations = pm
.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);
Collections.sort(listAppcations,
new ApplicationInfo.DisplayNameComparator(pm));// 排序
List<AppInfo> appInfos = new ArrayList<AppInfo>(); // 保存過濾查到的AppInfo
// 根據條件來過濾
switch (filter) {
case FILTER_ALL_APP: // 所有應用程序
appInfos.clear();
for (ApplicationInfo app : listAppcations) {
appInfos.add(getAppInfo(app));
}
return appInfos;
case FILTER_SYSTEM_APP: // 系統程序
appInfos.clear();
for (ApplicationInfo app : listAppcations) {
if ((app.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
appInfos.add(getAppInfo(app));
}
}
return appInfos;
case FILTER_THIRD_APP: // 第三方應用程序
appInfos.clear();
for (ApplicationInfo app : listAppcations) {
if ((app.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) {
appInfos.add(getAppInfo(app));
}
}
break;
case FILTER_SDCARD_APP: // 安裝在SDCard的應用程序
appInfos.clear();
for (ApplicationInfo app : listAppcations) {
if ((app.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) {
appInfos.add(getAppInfo(app));
}
}
return appInfos;
default:
return null;
}
return appInfos;
}
// 構造一個AppInfo對象 ,並賦值
private AppInfo getAppInfo(ApplicationInfo app) {
AppInfo appInfo = new AppInfo();
appInfo.setAppLabel((String) app.loadLabel(pm));
appInfo.setAppIcon(app.loadIcon(pm));
appInfo.setPkgName(app.packageName);
return appInfo;
}
}