Android,启动器和喜欢的应用程序

时间:2012-11-13 16:40:01

标签: android xml android-launcher

我正在尝试在Android中创建自己的启动器,并使用android sample Home

示例并不简单,几乎没有关于它的文档或教程,只有论坛上的一些问题没有明确的答案。

我尝试在我的启动器中添加收藏的应用程序,但应用程序正在搜索不存在的xml文件“etc/favorites.xml”。

我是否必须以编程方式创建此文件?这个文件是什么样的?

1 个答案:

答案 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 但我有自己的钛应用程序,我不知道需要哪个类值。