Android Nougat支持为应用程序设置圆形图标。
但是我找不到从applicationInfo获取圆形图标资源的方法。
我的应用程序需要显示所有应用程序的循环图标,就像启动器一样。
有没有办法获得应用程序的圆形图标?
答案 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
}