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

效果图

android获取手机已经安装的app信息_第1张图片

主体代码

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布局效果图

android获取手机已经安装的app信息_第2张图片

这里是activity_main3.xml布局代码

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

activity_main3.xml效果图

android获取手机已经安装的app信息_第3张图片

更多相关文章

  1. Android 隐藏系统状态栏和标题栏
  2. Android系统权限和root权限
  3. 仿照利用android系统源码资源文件,修改SeekBar颜色 前景与背景
  4. Android系统自带主题的使用及自定义主题
  5. Android系统在超级终端下必会的命令大全(adb shell命令大全)
  6. Android中获取屏幕相关信息(屏幕大小,状态栏、标题栏高度)
  7. Android 5.1系统禁止通知状态栏下拉
  8. Android中三星调用系统相机拍照后旋转的问题
  9. Android实现系统重新启动

随机推荐

  1. 虚拟机Dalvik
  2. Android原生(Native) C开发之一 环境搭建
  3. Edittext禁止输入回车键以及单行显示解决
  4. Android(安卓)网络编程之网络通信几种方
  5. Android异步任务AsyncTask
  6. Android设备adb调试
  7. Android开发指南-三维图形
  8. Android(安卓)数字签名学习笔记
  9. Android-sharedUserId数据权限 android:s
  10. android:ellipsize属性的含义