我正在尝试在 Android 中创建自己的启动器,并使用了android 示例 Home。
该示例并不简单,几乎没有关于它的文档或教程,只是论坛上的一些问题没有明确的答案。
我试图在我的启动器中添加最喜欢的应用程序,但该应用程序正在搜索一个etc/favorites.xml
不存在的 xml 文件“”。
我必须以编程方式创建此文件吗?这个文件是什么样的?
我正在尝试在 Android 中创建自己的启动器,并使用了android 示例 Home。
该示例并不简单,几乎没有关于它的文档或教程,只是论坛上的一些问题没有明确的答案。
我试图在我的启动器中添加最喜欢的应用程序,但该应用程序正在搜索一个etc/favorites.xml
不存在的 xml 文件“”。
我必须以编程方式创建此文件吗?这个文件是什么样的?
我找到了解决方案。
我在文件夹“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 但是我有自己的钛应用程序,我不知道需要哪个类值。