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

效果图

主体代码

private ListView mlistview;    private List packageInfoList;    private List applicationInfoList;    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 List list;        public MyAdapter(List list){            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<>();        List list = pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);        Collections.sort(list, new ApplicationInfo.DisplayNameComparator(pm));// 排序        Log.e("-------",list.size()+"");        applicationInfoList.clear();        for (int i=0;i resolveinfoList = 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的布局代码

<?xml version="1.0" encoding="utf-8"?>                            

mlistview_layout.xml布局效果图

这里是activity_main3.xml布局代码

<?xml version="1.0" encoding="utf-8"?>                        

activity_main3.xml效果图

更多相关文章

  1. Android应用开发相关下载资源
  2. Google API应用
  3. Android快速入门-----数据存储(三)Sqlite应用练习:增删查改案例练习
  4. 指定浏览器访问指定页面(支持UC、Opera、QQ、Dolphin、Skyfire、
  5. 移动应用测试框架—Calabash Android(安卓)简介
  6. 用Eclipse开发和调试Android应用程序(二)
  7. Android中Message机制的灵活应用
  8. adb使用查看应用内存使用情况
  9. android app 开启自动启动

随机推荐

  1. PHP:cURL error 60: SSL certificate unab
  2. ***技巧,小总结!
  3. 阿里P8架构师分享私用Java学习资料(含视频
  4. 使用 Oracle Load For Hadoop(OLH)实现数据
  5. Dom元素增加删除,修改,查找
  6. js之ajax与选项卡换肤实战
  7. JS第一课
  8. 记一次小白吃小黑过程
  9. 发布让最新Windows蓝屏的Poc
  10. CentOS6.8配置GO语言开发环境