您的位置:首页 > 其它

PackageManager获取指定类别应用程序

2015-09-24 20:26 453 查看
此文章写作背景来自于,自己有需要指定已安装app显示,但是网上并没有理想的自己想要的资料,所以自己整理一份,大牛请忽略。

部分信息来自于:/article/1390949.html

我把自己demo的代码都贴上去了,命名规范,很容易理解,也有多余的代码,希望不要干扰到大家理解和使用。

先看效果图:



请主要留意onCreateView(),getApplications(),MyAdapter.getView()中关于packagement的相关使用。

package com.marttinli.qromstudy1_1;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import android.R.integer;
import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.tencent.qrom.support.v4.app.Fragment;
import com.tencent.qrom.widget.ListView;
import com.tencent.qrom.widget.Toast;

public class MyListFragment extends Fragment {

	List<PackageInfo> list = new ArrayList<>();;
	onItemSelectedListener mListener;
	PackageManager packageManager;
	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的应用程序

	@Override
	public void onAttach(Activity activity) {
		super.onAttach(activity);
		try {
			mListener = (onItemSelectedListener) activity;
		} catch (ClassCastException e) {
			throw new ClassCastException(activity.toString()
					+ " must implement onItemSelectedListener");
		}
	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View rootView = inflater.inflate(R.layout.fragment_section_dummy,
				container, false);
		packageManager = getActivity().getPackageManager();
		List<PackageInfo> mlist = packageManager.getInstalledPackages(0);
		list.addAll(getApplications(mlist, FILTER_THIRD_APP));

		ListView listView = (ListView) rootView.findViewById(R.id.listview);
		listView.setAdapter(new MyAdapter());
		return rootView;
	}

	private List<PackageInfo> getApplications(List<PackageInfo> mlist, int flag) {
		List<PackageInfo> l = new ArrayList<PackageInfo>();
		switch (flag) {
		case FILTER_ALL_APP:
			l.addAll(mlist);
			break;
		case FILTER_SYSTEM_APP:
			for (PackageInfo packageInfo : mlist) {
				if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
					l.add(packageInfo);
				}
			}
			break;
		case FILTER_THIRD_APP:
			for (PackageInfo packageInfo : mlist) {
				if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) {
					l.add(packageInfo);
				}// 本来是系统程序,被用户手动更新后,该系统程序也成为第三方应用程序了
				else if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
					l.add(packageInfo);
				}
			}
			break;
		case FILTER_SDCARD_APP:
			for (PackageInfo packageInfo : mlist) {
				if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) {
					l.add(packageInfo);
				}
			}
			break;
		default:
			break;
		}
		return l;
	}

	public interface onItemSelectedListener {
		public void onItemSelected(int position);
	}

	public void onListItemClick(ListView l, View v, int position, long id) {
		// TODO Auto-generated method stub
		mListener.onItemSelected(position);

	}

	class MyAdapter extends BaseAdapter {

		@Override
		public int getCount() {
			return list.size();
		}

		@Override
		public Object getItem(int arg0) {
			// TODO Auto-generated method stub
			return list.get(arg0);
		}

		@Override
		public long getItemId(int arg0) {
			// TODO Auto-generated method stub
			return arg0;
		}

		@Override
		public View getView(int arg0, View convertView, ViewGroup arg2) {

			Holder holder;
			if (null == convertView) {
				holder = new Holder();
				convertView = (LinearLayout) LayoutInflater.from(getActivity())
						.inflate(R.layout.item2_listview, null);
				holder.iconView = (ImageView) convertView
						.findViewById(R.id.imageView1);
				holder.textView = (TextView) convertView
						.findViewById(R.id.textView1);
				holder.button = (Button) convertView.findViewById(R.id.button1);
				convertView.setTag(holder);
			} else {
				holder = (Holder) convertView.getTag();
			}
			final PackageInfo app = list.get(arg0);
			holder.iconView.setImageDrawable(packageManager
					.getApplicationIcon(app.applicationInfo));
			holder.textView.setText(packageManager.getApplicationLabel(
					app.applicationInfo).toString());
			holder.button.setText("打开");
			holder.button.setOnClickListener(new OnClickListener() {

				@Override
				public void onClick(View view) {

					Intent intent = packageManager
							.getLaunchIntentForPackage(app.packageName);
					getActivity().startActivity(intent);
				}
			});
			return convertView;
		}

		class Holder {
			public ImageView iconView;
			public TextView textView;
			public Button button;

		}

	}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: