如何获得另一个应用程序圆形图标drawable?

时间:2017-03-02 03:07:04

标签: android icons

Android Nougat支持为应用程序设置圆形图标。

但是我找不到从applicationInfo获取圆形图标资源的方法。

我的应用程序需要显示所有应用程序的循环图标,就像启动器一样。

有没有办法获得应用程序的圆形图标?

2 个答案:

答案 0 :(得分:0)

这是不可能的。

应用程序包信息由PackageParser.java解析,仅当GetPixel设置为true时才会解析android:roundIcon。它由OEM在框架config.xml中定义。

如果您的测试设备启用了R.bool.config_useRoundIcon,则可以通过R.bool.config_useRoundIcon获得圆形图标(android:roundIcon)。否则,您只能获得默认图标(PackageItemInfo.java)。

答案 1 :(得分:0)

您可以手动解析清单并查找roundIcon资源:

  fun getRoundIcon(context: Context, applicationInfo: ApplicationInfo): Drawable? {
    try {
      val res = context.packageManager.getResourcesForApplication(applicationInfo)
      res.assets.openXmlResourceParser("AndroidManifest.xml").use {
        var eventType: Int
        while (true) {
          eventType = it.nextToken()
          if (eventType == XmlPullParser.START_TAG && it.name == "application") {
            for (i in 0 until it.attributeCount)
              if (it.getAttributeName(i) == "roundIcon") {
                return ResourcesCompat.getDrawable(
                  res,
                  Integer.parseInt(it.getAttributeValue(i).substring(1)),
                  null
                )
              }
          }
          if (eventType == XmlPullParser.END_DOCUMENT) break
        }
      }
    } catch (e: Exception) {
      e.printStackTrace()
    }
    return null
  }