要获取已安装应用的信息
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;
}
}
}