Android进阶_获取已安装应用

要获取已安装应用的信息
1、PackageManager
查询已安装应用
安装卸载应用查询permission信息
查询Application相关信息
增加删除permission
清楚用户数据、缓存、代码段等
PackageManager pm = context.getPackageManager();
常用方法

List<ResolveInfo> queryIntentActivities(Intent intent, int flags)//intent:要查询Activity符合的Intent,flags:0表示返回所有符合要求的Activity
List<PackageInfo> getInstalledPackages(int flags)//0代表返回所有PackageInfo

ApplicationInfo:从一个特定的应用中的到的信息,通过解析AndroidManifest.xml中的<application/>标签获取信息
ResolveInfo : 通过解析与IntentFilter对应Intene获取信息,通过解析AndroidManifest.xml中的 <intent-filter/>标签来获取信息
PackageInfo:获取各种的关联了当前已装入设备的应用程序包的信息

通过 PackageInfo  获取具体信息方法:
  包名获取方法:packageInfo.packageName 
  icon获取获取方法:packageManager.getApplicationIcon(applicationInfo)
  应用名称获取方法:packageManager.getApplicationLabel(applicationInfo)
  使用权限获取方法:packageManager.getPackageInfo(packageName,PackageManager.GET_PERMISSIONS).requestedPermissions

通过 ResolveInfo 获取具体信息方法:
  包名获取方法:resolve.activityInfo.packageName
  icon获取获取方法:resolve.loadIcon(packageManager)
  应用名称获取方法:resolve.loadLabel(packageManager).toString()

代码:


public class ResolveInfoAct extends ActionBarActivity implements OnItemClickListener
{

	private Context mContext;
	
	private PackageManager pm; 
	private List<ResolveInfo> apps;
	private ResolveInfo info;
	
	private ListView lv;
	
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.act_resolve);
		
		mContext = ResolveInfoAct.this;
		
		lv = (ListView) findViewById(R.id.res_lv);
		
		loadAppInfo();
		
		lv.setAdapter(new ResolveAdapter());
		lv.setOnItemClickListener(this);
	}

	private void loadAppInfo()
	{
		pm = getPackageManager();
		
		Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
		mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);

//		info.loadIcon(pm);// 图标
//		info.activityInfo.applicationInfo.// 通过info获取 activityInfo和applicationInfo
//		info.loadLabel(pm);
//		pm = getPackageManager();
		apps = pm.queryIntentActivities(mainIntent, 0);
	}
	
	class ResolveAdapter extends BaseAdapter
	{
		LayoutInflater inf = null;
		
		public ResolveAdapter()
		{
			inf = LayoutInflater.from(mContext);
		}
		
		@Override
		public int getCount()
		{
			return apps.size();
		}

		@Override
		public Object getItem(int position)
		{
			return null;
		}

		@Override
		public long getItemId(int position)
		{
			return 0;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent)
		{
			ViewHolder holder = null;
			if (convertView == null)
			{
				holder = new ViewHolder();
				convertView = inf.inflate(R.layout.item_resolve, null);
				holder.iv = (ImageView) convertView.findViewById(R.id.item_resolve_iv_ic);
				holder.tv = (TextView) convertView.findViewById(R.id.item_resolve_tt_name);
				convertView.setTag(holder);
			}else
			{
				holder = (ViewHolder) convertView.getTag();
			}
			holder.iv.setImageDrawable(apps.get(position).loadIcon(pm));
			holder.tv.setText(apps.get(position).loadLabel(pm));
			return convertView;
		}
		class ViewHolder
		{
			ImageView iv;
			TextView tv;
		}
	}

	@Override
	public void onItemClick(AdapterView<?> parent, View view, int position,
			long id)
	{
		ResolveInfo info = apps.get(position);
		String pn = info.activityInfo.packageName;
//		String cn = info.activityInfo.name;
//		startActivity(new Intent().setComponent(new ComponentName(pn, cn)));
		startActivity(pm.getLaunchIntentForPackage(pn));
		
	}

public class PackageInfoAct extends ActionBarActivity
{
	private Context mContext;

	private PackageManager pm;
	private List<PackageInfo> apps = new ArrayList<PackageInfo>();
	private List<PackageInfo> appsUser = new ArrayList<PackageInfo>();
	private List<PackageInfo> appsSys = new ArrayList<PackageInfo>();

	private ListView lv;

	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.act_package);
		mContext = PackageInfoAct.this;
		lv = (ListView) findViewById(R.id.pac_lv);
		loadAppInfo();
		lv.setAdapter(new PackageAdapter(apps));
	}

	private void loadAppInfo()
	{
		pm = getPackageManager();
		apps = pm.getInstalledPackages(0);
	}

	public void onClick_allApp(View view)
	{
		lv.setAdapter(new PackageAdapter(apps));
	}

	public void onClick_userApp(View view)
	{
		if (appsUser.size() <= 0)
		{
			for (int i = 0; i < apps.size(); i++)
			{
				if ((apps.get(i).applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0)
				{
					appsUser.add(apps.get(i));
				}
			}

		}
		lv.setAdapter(new PackageAdapter(appsUser));
	}

	public void onClick_systemApp(View view)
	{
		if (appsSys.size() <= 0)
		{
			for (int i = 0; i < apps.size(); i++)
			{
				if ((apps.get(i).applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0)
				{
					System.out.println("--" + apps.get(i) + i);
					appsSys.add(apps.get(i));
				}
			}
		}
		lv.setAdapter(new PackageAdapter(appsSys));
	}

	class PackageAdapter extends BaseAdapter
	{

		private List<PackageInfo> list;
		private LayoutInflater inf;

		public PackageAdapter(List<PackageInfo> list)
		{
			inf = LayoutInflater.from(mContext);
			this.list = list;
		}

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

		@Override
		public Object getItem(int position)
		{
			return null;
		}

		@Override
		public long getItemId(int position)
		{
			return 0;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent)
		{
			ViewHolder holder = null;
			if (convertView == null)
			{
				convertView = inf.inflate(R.layout.item_package, null);
				holder = new ViewHolder();

				holder.iv = (ImageView) convertView
						.findViewById(R.id.item_package_iv_ic);
				holder.tv_name = (TextView) convertView
						.findViewById(R.id.item_package_tt_name);
				holder.tv_version = (TextView) convertView
						.findViewById(R.id.item_package_tt_version);
				holder.tv_pack = (TextView) convertView
						.findViewById(R.id.item_package_tt_package);
				convertView.setTag(holder);
			} else
			{
				holder = (ViewHolder) convertView.getTag();
			}
			holder.iv.setImageDrawable(list.get(position).applicationInfo
					.loadIcon(pm));
			holder.tv_name.setText("应用名称:"
					+ list.get(position).applicationInfo.loadLabel(pm));
			holder.tv_pack.setText("包名:"
					+ list.get(position).applicationInfo.packageName);
			holder.tv_version.setText("版本号:" + list.get(position).versionCode
					+ "版本名称" + list.get(position).versionName);
			return convertView;
		}

		class ViewHolder
		{
			ImageView iv;
			TextView tv_name;
			TextView tv_version;
			TextView tv_pack;
		}
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值