Android获取系统桌面的应用以及图标,表现在本身的app界面 ...

打印 上一主题 下一主题

主题 985|帖子 985|积分 2955

  1. <strong>需求就是,获取系统上所有的应用及图标,然后显示在自己的app应用上,然后通过点击对应的图标可以跳转到对应的软件里面去。</strong>
复制代码
1、先获取到系统的app功能
  1. public List<ApplicationInfo> getAllApps(Context context) {
  2.     List<ApplicationInfo> apps = new ArrayList<>();
  3.     PackageManager packageManager = context.getPackageManager();
  4.     // GET_META_DATA表示获取应用的元数据
  5.     List<ApplicationInfo> installedApps = packageManager.getInstalledApplications(PackageManager.GET_META_DATA);
  6.     for (ApplicationInfo appInfo : installedApps) {
  7.         // 通过appInfo.packageName可以获取应用的包名
  8.         // 过滤掉系统应用和非启动器的第三方应用
  9.         if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
  10.             // 非系统应用
  11.             // apps.add(appInfo);
  12.         } else if (isLauncherApp(packageManager, appInfo)) {
  13.             // 系统应用且是启动器应用
  14.             LogUtils.d("appInfo.packageName==:" +appInfo.packageName);
  15.             apps.add(appInfo);
  16.         }
  17.     }
  18.     return apps;
  19. }
  20. private boolean isLauncherApp(PackageManager packageManager, ApplicationInfo applicationInfo) {
  21.     Intent intent = new Intent(Intent.ACTION_MAIN);
  22.     intent.addCategory(Intent.CATEGORY_LAUNCHER);
  23.     intent.setPackage(applicationInfo.packageName);
  24.     List<ResolveInfo> resolveInfoList = packageManager.queryIntentActivities(intent, 0);
  25.     return !resolveInfoList.isEmpty();
  26. }
复制代码
2、然后把获取到的资源放入到适配器
  1. public void addProjiectData() {
  2.     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
  3.         applicationInfoList=new ArrayList<>();
  4.         applicationInfoList=getAllApps(SysAppActivity.this);
  5.     }
  6.     LogUtils.d("applicationInfoList==:" + applicationInfoList.size()+",包名:"+applicationInfoList.get(4).packageName);
  7.     for(int i =0;i<applicationInfoList.size();i++) {
  8.         SysAppResult md = new SysAppResult();
  9.         md.setName(applicationInfoList.get(i).packageName);
  10.         //  md.setImgPath(applicationInfoList.get(i).icon);
  11.         sysAppResultList.add(md);
  12.     }
  13.     sysAppAdapter.setDate(sysAppResultList);
  14. }
复制代码
3、末了在适配器里面表现对应的图标
  1. final SysAppResult result = mlist.get(position);
  2.   LogUtils.showLogD("name_tv="+result.getName());
  3. PackageManager pm = context.getPackageManager();
  4. ApplicationInfo appInfo = null;
  5. try {
  6.      appInfo = pm.getApplicationInfo(result.getName(), 0);
  7.      Drawable appIcon = pm.getApplicationIcon(appInfo);
  8.      holder.project_img.setImageDrawable(appIcon);
  9. } catch (PackageManager.NameNotFoundException e) {
  10.      e.printStackTrace();
  11. }
复制代码
通过这三步骤就可以在本身app表现系统的apk了,跳转的话这个就不说了懂得都懂。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

乌市泽哥

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表