public class AppExplorerActivity extends Activity implements Runnable {
private List<PackageInfo> packageInfos = null;// 定义一个列表 里面放的是程序的包的信息类
private GridView gridView = null;
private ImageButton ib_change_category = null;//
private boolean userApplication = true;
private List<PackageInfo> userPackageInfos = null;
private List<PackageInfo> systemPackageInfos = null;
private myAdapter adapter = null;
Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
if (userApplication) {
adapter = new myAdapter(AppExplorerActivity.this,
systemPackageInfos);
gridView.setAdapter(adapter);
Toast.makeText(AppExplorerActivity.this, "系统软件",
Toast.LENGTH_SHORT).show();
} else {
adapter = new myAdapter(AppExplorerActivity.this,
userPackageInfos);
gridView.setAdapter(adapter);
Toast.makeText(AppExplorerActivity.this, "用户软件",
Toast.LENGTH_SHORT).show();
}
AppExplorerActivity.this.pbar.dismiss();
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.show_app_grid);
gridView = (GridView) findViewById(R.id.gv_apps);
//gridView点击事件 实现运行相应的程序
gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
PackageInfo p = adapter.getList().get(position);
String packageName = p.packageName;//获得程序的包名
ActivityInfo[] acti = p.activities;//获得包下所有activity
if (acti == null) {//包下没有activity
return;
}
ActivityInfo activity = acti[0];//获得主Activity
String activityName = activity.name;//获得主Activity名字
Intent intent = new Intent();
intent.setComponent(new ComponentName(packageName, activityName));//界面跳转 这个很重要
startActivity(intent);
}
});
ib_change_category = (ImageButton) findViewById(R.id.ib_change_category);
ib_change_category.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// userApplication ? false : true;
if (userApplication)
userApplication = false;
else
userApplication = true;
handler.post(AppExplorerActivity.this);// 重新刷新GridView
}
});
/*
* 获得手机中的所有的应用程序
*/
packageInfos = getPackageManager().getInstalledPackages(
PackageManager.GET_UNINSTALLED_PACKAGES
| PackageManager.GET_ACTIVITIES);// PackageManager.GET_ACTIVITIES这个必须加上
// 当想获得包下面的activity的名字时
// 需要这个
/*
* 定义两个list<PackageInfo> 来存放系统应用程序 和用户自己的应用程序
*/
userPackageInfos = new ArrayList<PackageInfo>();// 存放用户软件
systemPackageInfos = new ArrayList<PackageInfo>();// 存放系统软件
// 这段软件类型判断 为固定格式 可以记住
for (int i = 0; i < packageInfos.size(); i++) {
PackageInfo temp = packageInfos.get(i);
ApplicationInfo appInfo = temp.applicationInfo;
/*
* 将用户软件和系统软件分开
*/
if (((appInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0)
|| ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0)) {
userPackageInfos.add(temp);
} else
// 系统软件
systemPackageInfos.add(temp);
}
new Thread(this).start();
}
class myAdapter extends BaseAdapter {
LayoutInflater inflater = null;
List<PackageInfo> list = null;
public ArrayList<PackageInfo> getList() {
return (ArrayList<PackageInfo>) list;
}
public myAdapter(Context context, List<PackageInfo> list) {
inflater = LayoutInflater.from(context);
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = inflater.inflate(R.layout.gv_item, null);
ImageView imageView = (ImageView) view
.findViewById(R.id.gv_item_icon);
TextView textView = (TextView) view
.findViewById(R.id.gv_item_appname);
imageView.setImageDrawable(list.get(position).applicationInfo
.loadIcon(getPackageManager()));// 获得程序的图标
textView.setText(list.get(position).applicationInfo
.loadLabel(getPackageManager()));// 获得程序的名称
return view;
}
}
@Override
public void run() {
handler.sendEmptyMessage(0);
}
}