android 获取已安装 错误代码,android获取手机已经安装的app信息

Android获取手机已安装APP(系统/非系统)

效果图

ef6a00c8727c169b95fc772ac4d9d8ca.png

主体代码

private ListView mlistview;

private ListpackageInfoList;

private ListapplicationInfoList;

private MyAdapter myAdapter;

private PackageManager pm;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main3);

mlistview=findViewById(R.id.mlistview);

getAllAppNames();

myAdapter=new MyAdapter(applicationInfoList);

mlistview.setAdapter(myAdapter);

myAdapter.notifyDataSetChanged();

mlistview.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView> parent, View view, int position, long id) {

doStartApplicationWithPackageName(applicationInfoList.get(position).getPackageName());

}

});

}

//自定义适配器

public class MyAdapter extends BaseAdapter{

private Listlist;

public MyAdapter(Listlist){

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=null;

if(convertView==null){

view=LayoutInflater.from(Main3Activity.this).inflate(R.layout.mlistview_layout,null);

}else{

view=convertView;

}

TextView tv_packagename=view.findViewById(R.id.tv_packagename);

TextView tv_appname=view.findViewById(R.id.tv_appname);

ImageView img=view.findViewById(R.id.img);

tv_appname.setText(list.get(position).getName());

tv_packagename.setText(list.get(position).getPackageName());

img.setImageDrawable(list.get(position).getIcon());

return view;

}

}

public void getAllAppNames(){

pm=getPackageManager();

获取到所有安装了的应用程序的信息,包括那些卸载了的,但没有清除数据的应用程序

// packageInfoList=pm.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);

applicationInfoList=new ArrayList<>();

Listlist = pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);

Collections.sort(list, new ApplicationInfo.DisplayNameComparator(pm));// 排序

Log.e("-------",list.size()+"");

applicationInfoList.clear();

for (int i=0;iresolveinfoList = getPackageManager()

.queryIntentActivities(resolveIntent, 0);

if(resolveinfoList.size() == 0){

return;

}

ResolveInfo resolveinfo = resolveinfoList.iterator().next();

if (resolveinfo != null) {

String packageName = resolveinfo.activityInfo.packageName;

//App启动的Activity

String className = resolveinfo.activityInfo.name;

// LAUNCHER Intent

Intent intent = new Intent(Intent.ACTION_MAIN);

intent.addCategory(Intent.CATEGORY_LAUNCHER);

// 设置ComponentName参数1:packagename参数2:启动的Activity

ComponentName cn = new ComponentName(packageName, className);

intent.setComponent(cn);

startActivity(intent);

}

}

// 构造一个AppInfo对象 ,并赋值

private AppInfo getAppInfo(ApplicationInfo app) {

AppInfo appInfo = new AppInfo();

appInfo.setName(app.loadLabel(pm).toString());

appInfo.setIcon(app.loadIcon(pm));

appInfo.setPackageName(app.packageName);

return appInfo;

}

这里是定义的实体bean

public class AppInfo implements Serializable{

/** 序列号 */

private static final long serialVersionUID = -6660233212727684115L;

/** 名称 */

public String name;

/** (路径) */

public String path;

/** 图标 */

public Drawable icon;

/** 包名 */

public String packageName;

public static long getSerialVersionUID() {

return serialVersionUID;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getPath() {

return path;

}

public void setPath(String path) {

this.path = path;

}

public Drawable getIcon() {

return icon;

}

public void setIcon(Drawable icon) {

this.icon = icon;

}

public String getPackageName() {

return packageName;

}

public void setPackageName(String packageName) {

this.packageName = packageName;

}

}

这里是mlistview_layout.xml的布局代码

mlistview_layout.xml布局效果图

b557afb2d84c7dd801084bf1def4bbbb.png

这里是activity_main3.xml布局代码

activity_main3.xml效果图

c3d95c0c55132a078f2c636d132bcce0.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值