任务管理器简单实现

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);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值