ric*_*fox 3 android android-launcher
我的应用程序包含一个功能,用于列出用户设备上安装的所有应用程序,并附带图标.现在,用户在此列表中请求图标包支持.
目前我列出已安装的应用程序:
final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
final List<ResolveInfo> rgRi = pm.queryIntentActivities( mainIntent, 0);
Run Code Online (Sandbox Code Playgroud)
然后为每个加载图标ResolveInfo:
.loadIcon(application.getPackageManager());
Run Code Online (Sandbox Code Playgroud)
这给了我应用程序的图标,但不是图标包,而是默认图标.
如果应用程序可用,如何访问应用程序的图标包图标?
ric*_*fox 13
回答我自己的问题.这是一个关于从图标包加载图标的简短教程(包含伪代码).
查找意图过滤器的应用程序com.gau.go.launcherex.theme或org.adw.launcher.THEMES.其他人也可能存在.使用例如
PackageManager.queryIntentActivities(new Intent("org.adw.launcher.THEMES"), PackageManager.GET_META_DATA);
Run Code Online (Sandbox Code Playgroud)
它可以作为资源或图标包的assets文件夹中找到.使用其中之一
int i = Resources.getIdentifier("appfilter", "xml", "iconpack.package.name");
Resources.getXml(i);
Run Code Online (Sandbox Code Playgroud)
要么
InputStream s = iconPackres.getAssets().open("appfilter.xml");
XmlPullParserFactory f = XmlPullParserFactory.newInstance();
f.setNamespaceAware(true);
XmlPullParser p = f.newPullParser();
p.setInput(s, "utf-8");
Run Code Online (Sandbox Code Playgroud)
Appfilter.xml描述图标包内容.除此之外,themer还能够在背景上绘制图标,提供面具等.这些都在XDA上有所描述:http://forum.xda-developers.com/showthread.php?t = 1649891.我们最感兴趣的是<item>标签,例如
<item component="ComponentInfo{com.android.browser/com.android.browser.BrowserActivity}" drawable="com_android_browser_browseractivity" />
Run Code Online (Sandbox Code Playgroud)
该component属性包含包和活动drawable的名称,并且是图标包中匹配图标的名称.循环执行XmlPullParser上一步,找到所需的图标.
只需获取要加载其图标的应用程序的组件名称即可
PackageManager.getLaunchIntentForPackage("app.package.name").getComponent().toString();
Run Code Online (Sandbox Code Playgroud)
比加载图标
Resources.getIdentifier(componentName, "drawable", "app.package.name");
Resources.getDrawable(...)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2367 次 |
| 最近记录: |