我正在尝试在Android中创建自己的启动器,并使用android sample Home。
示例并不简单,几乎没有关于它的文档或教程,只有论坛上的一些问题没有明确的答案。
我尝试在我的启动器中添加收藏的应用程序,但应用程序正在搜索不存在的xml文件“etc/favorites.xml
”。
我是否必须以编程方式创建此文件?这个文件是什么样的?
答案 0 :(得分:1)
我找到了解决方案。
我在“assets”文件夹中创建了一个文件“favorites.xml”,并写道:
<?xml version="1.0" encoding="UTF-8"?>
<favorites>
<favorite package="com.android.email" class="com.android.email.activity.Welcome"/>
<favorite package="com.android.browser" class="com.android.browser.BrowserActivity"/>
</favorites>
在示例代码中,我编辑了方法“bindFavorites”(我使用InputStream而不是FileReader加载xml文件):
/**
* Refreshes the favorite applications stacked over the all apps button.
* The number of favorites depends on the user.
*/
private void bindFavorites(boolean isLaunching) {
if (!isLaunching || mFavorites == null) {
if (mFavorites == null) {
mFavorites = new LinkedList<ApplicationInfo>();
} else {
mFavorites.clear();
}
InputStream is = null;
try {
is = getAssets().open("favorites.xml");
} catch (IOException e) {
Log.e(LOG_TAG, "Couldn't find or open favorites file ");
return;
}
final Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
final PackageManager packageManager = getPackageManager();
try {
final XmlPullParser parser = Xml.newPullParser();
parser.setInput(is, "UTF-8");
beginDocument(parser, TAG_FAVORITES);
ApplicationInfo application;
while (true) {
nextElement(parser);
String name = parser.getName();
if (!TAG_FAVORITE.equals(name)) {
break;
}
final String favoritePackage = parser.getAttributeValue(null, TAG_PACKAGE);
final String favoriteClass = parser.getAttributeValue(null, TAG_CLASS);
final ComponentName cn = new ComponentName(favoritePackage, favoriteClass);
intent.setComponent(cn);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
application = getApplicationInfo(packageManager, intent);
if (application != null) {
application.intent = intent;
mFavorites.addFirst(application);
}
}
} catch (XmlPullParserException e) {
Log.w(LOG_TAG, "Got exception parsing favorites.", e);
} catch (IOException e) {
Log.w(LOG_TAG, "Got exception parsing favorites.", e);
}
}
mApplicationsStack.setFavorites(mFavorites);
}
它工作但我还需要一些帮助,在xml文件中我们必须设置类值,我不知道在哪里可以找到这些信息。如您所见,此值取决于应用程序。我在这里找到了一些值:http://forum.xda-developers.com/showthread.php?t=836719 但我有自己的钛应用程序,我不知道需要哪个类值。