Android 获取手机已安装的应用列表实现详解
1、扫描已安装的应用列表
var queryIntentActivities = mutableListOf<ResolveInfo>() val intent = Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER) if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { queryIntentActivities = packageManager.queryIntentActivities(intent, PackageManager.MATCH_ALL) } else { queryIntentActivities = packageManager.queryIntentActivities(intent, 0) }
上面代码中,queryIntentActivities 就是获取的应用列表数据
遍历获取每个应用的信息
下面就直接通过遍历获取每个应用的信息了
queryIntentActivities.forEach { bean = AppInfoBean( icon = it.loadIcon(packageManager), appName = it.loadLabel(packageManager).toString(), appPackageName = it.activityInfo.applicationInfo.packageName ) appBeanList.add(bean!!) }
上面 AppInfoBean 是自己定义的实体bean 里面有应用的名称,包名,还有Drawable 类型的应用icon
appBeanList 是定义的list变量,
注意:这里提个醒,也是我遇到的一个小问题,在扫描所有应用的时候,Intent的action 是:Intent.ACTION_MAIN 切记,否则一个也查不到,
添加权限
还有,可能你通过上面获取的应用列表只有几个,不全,此时,你需要添加一个权限:
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" tools:ignore="QueryAllPackagesPermission" />
有了上面这个权限,你才能获取到所有的应用
通过包名查询对应应用的图标icon
/** * 根据应用包名,查应用的icon图 */ private fun loadAppIconByPackageName(packageName:String,listener:(icon:Drawable) -> Unit){ try { if (packageManager == null){ packageManager = BaseApp.myApp.packageManager } val packageInfo = packageManager?.getPackageInfo( packageName, PackageManager.GET_ACTIVITIES ) packageInfo?.applicationInfo?.loadIcon(packageManager)?.let { listener.invoke(it) } } catch (e: Exception) { listener.invoke(BaseApp.myApp.resources.getDrawable(R.mipmap.ic_launcher)) } }
这个就简单了,获取当前的packageManager 就可以进行获取对应的icon了,不过这个跟上面获取应用一样,也需要权限和否则可能也会遇到扫描不到的问题哦。
通过包名获取对应应用的启动页的全类名
/** * 通过包名获取app的入口activity */ @SuppressLint("WrongConstant") fun getAppEnter(context: Context, packageName: String): String { var mainAct = "" try { val intent = Intent().apply { action = Intent.ACTION_MAIN addCategory(Intent.CATEGORY_LAUNCHER) } val list = context.packageManager.queryIntentActivities(intent, PackageManager.GET_ACTIVITIES) list.forEach { if (TextUtils.equals(it.activityInfo.packageName, packageName)) { mainAct = it.activityInfo.name } } } catch (ex: Exception) { } finally { return mainAct } }
这个需要注意的事项和第一个获取应用列表一样,其他的都没什么需要注意的了。
以上就是Android 获取手机已安装的应用列表实现详解的详细内容,更多关于Android 获取应用列表的资料请关注脚本之家其它相关文章!
相关文章
Android中NavigationView的使用与相关问题解决
大家都知道NavigationView的引入让 Android侧边栏实现起来相当方便,最近公司项目中也使用这个新的控件完成了侧边栏的改版。在使用过程中遇到一些问题所以记录一下。本文分为两个部分,一是基本使用,二是相关问题的解决,感兴趣的朋友们下面来一起看看吧。2016-10-10Android关于BottomNavigationView使用指南
本文主要介绍了Android关于BottomNavigationView使用指南,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2022-01-01Android开发手册Button实现selector选择器
这篇文章主要为大家介绍了Android开发手册Button实现selector选择器,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-06-06利用百度地图Android sdk高仿微信发送位置功能及遇到的问题
这篇文章给大家介绍了利用百度地图Android sdk高仿微信发送位置功能,在实现此功能的时候遇到点小问题,下面小编给大家列出来,需要的朋友参考下吧2017-12-12Android使用OKHttp库实现视频文件的上传到服务器功能
这篇文章主要介绍了Android使用OKHttp库实现视频文件的上传到服务器功能,需要的朋友可以参考下2018-03-03Android中使用GridLayout网格布局来制作简单的计算器App
这篇文章主要介绍了Android中使用GridLayout网格布局来制作简单的计算器App的实例,GridLayout比表格布局TabelLayout更容易用来制作计算器这样的多按钮排列的界面,需要的朋友可以参考下2016-04-04
最新评论