1

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

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

我试图在我的启动器中添加最喜欢的应用程序,但该应用程序正在搜索一个etc/favorites.xml不存在的 xml 文件“”。

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

4

1 回答 1

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

于 2012-11-15T16:04:49.553 回答