【问题标题】:Android widget in emulator模拟器中的Android小部件
【发布时间】:2011-05-02 03:26:10
【问题描述】:

我有一个现有的 Android 应用程序。 我使用以下代码向它添加了一个简单的小部件:

  • 使用<receiver> 块更新了我的清单,该块提供了有关我的AppWidgetProvider 实现的信息
  • 在 res/xml 中添加了一个带有 <appwidget-provider> 元素的新 xml 文件,该元素包含 height/width/updatePeriod/initialLayout/icon/label 属性
  • 添加了一个简单的默认布局,带有 ImageViewTextView
  • 实现了我的AppWidgetProvider

当我构建并将其部署到模拟器时,我的小部件不会显示在小部件列表中。我错过了一些“安装”小部件的步骤吗?我需要做一些特别的事情才能让它出现在模拟器中吗?

编辑: 这是我的清单接收器的样子:

<receiver android:name=".MyAppWidgetProvider"
          android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>
    <meta-data android:name="android.appwidget.provider"
               android:resource="@xml/my_appwidget_info" />
</receiver>

这是我的 my_appwidget_info.xml 的样子:

<?xml version="1.0" encoding="UTF-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:icon="@drawable/ic_logo"
    android:label="MySampleApp"
    android:minWidth="294dp"
    android:minHeight="72dp"
    android:updatePeriodMillis="86400000"
    android:initialLayout="@layout/my_app_widget" >
</appwidget-provider>

【问题讨论】:

  • 它可以在实际设备上使用吗?
  • 不知道。我仍在等待设备出现。
  • 您没有将应用程序安装到您的(虚拟)SD 卡上?清单中的安装位置是什么?
  • android:installLocation="auto" 我尝试了带和不带 SD 卡的模拟器。关于如何调试这样的东西的任何想法?
  • 您可以转到主屏幕中的设置,转到应用程序,然后转到您的应用程序。如果它为您提供“移动到手机”,那么它在 SD 卡上。您可以将安装位置设置为 internalOnly 以防止它进入 SD 卡。

标签: android android-emulator android-widget


【解决方案1】:

清单中的接收者标签是否具有正确的意图过滤器和元数据?它应该类似于documentation 中的示例:

<receiver android:name="MyAppWidgetProvider" >
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>
    <meta-data android:name="android.appwidget.provider"
               android:resource="@xml/my_appwidget_info" />
</receiver>

接收者需要将这两个部分都识别为应用小部件。

编辑:&lt;receiver&gt; 标签也需要位于&lt;application&gt; 标签内。

【讨论】:

  • 嗯,看起来您已经拥有了显示在小部件列表中所需的一切。我将您提供的代码复制到一个新项目中,并且该小部件显示在我的列表中。您在部署时没有收到任何错误?
  • 不,没有错误。我什至试图卸载我的应用程序并重新安装。其他建议?
  • 您的 标签需要位于您的 标签内。如果 之外,它不会抛出任何错误,但它根本不会识别
  • ^ 就是这样 - 我的 标记之外有 XML。谢谢!
  • 这也是我的问题。如果有某种验证试图捕捉这些类型的错误,那就太好了。好像真的很常见。
【解决方案2】:

如果您的应用安装在 SD 卡上,您的所有小部件都会悄悄地拒绝出现在列表中。 (文档明确指出,如果您在外部存储上,则不能拥有小部件)。

您可以转到主屏幕中的设置,转到应用程序,然后转到您的应用程序。如果它为您提供“移动到手机”,那么它在 SD 卡上。您可以将安装位置设置为 internalOnly 以防止它进入 SD 卡。

如果您确实允许在 SD 卡上安装(因为用户通常会要求这样做),他们需要明确在这种情况下他们不能拥有该小部件。如果应用在 SD 卡上并且您想使用小部件,您首先必须将应用移回内部存储,然后重置手机 (!)。

【讨论】:

  • 这是很好的信息 - 谢谢。但是在我的模拟器中,我正在安装到主内存。我什至在没有任何 SD 卡的模拟器上运行它。
【解决方案3】:

我也有同样的问题。需要检查的几件事可以阻止它出现在不同的模型上。

1) 必须在 xml 中的 AppWidget-Provider 上设置 minHeight 和 minWidth,如果您删除其中任何一个并在模拟器中启动,您的小部件将消失。 2)如果您没有在 AppWidget-Provider 中提供 previewImage,某些模型会出现问题 3)如果您安装在 SD 卡上而不是内部安装,某些型号可能会出现问题,尽管我仍然更喜欢安装在 SD 卡上。 4)即使您不打算使用任何活动,某些模型也需要定义 Main 和 Launcher 的活动。 (您可以简单地制作一个虚拟的,上面写着“这只是一个小部件应用程序” 5)您必须正确设置清单,如 TinJa 的答案所示。

在最终让它出现在所有模型和模拟器中之前,我为此奋斗了很长时间,所以请耐心等待,确保您没有遗漏任何东西并设置需要存在的值。请记住,有些手机会缓存小部件列表,并且在您启动第一个 Activity 或重新启动手机之前可能不会更新。

希望对您有所帮助。

山姆

【讨论】:

    【解决方案4】:

    我遇到了同样的问题,然后我终于弄明白了。通常当你模拟一个应用程序时,它有一个要加载的活动。对于仅包含小部件的应用程序,情况并非如此,但 IDE 仍然认为您正在尝试启动 Activity。

    要更改此设置,请转到您的 构建选项

    然后将 Launch Options 更改为 Nothing

    【讨论】:

      【解决方案5】:

      我遇到了同样的问题。原来我不小心在两个不同的文件夹中有两个元数据资源 xml 文件,我的“布局”文件夹和我的“xml”文件夹。它首先在“布局”中找到(空)资源,并将其用于其元数据。

      这是一个愚蠢的错误,但请确保您的接收器元数据标记中只有一个同名的 xml 文件。另外我认为它应该始终在 xml 文件夹中。

      【讨论】:

        【解决方案6】:

        我遇到了同样的问题。 我的问题是我有 /layout/main.xml 文件,当我删除它时,小部件会出现!

        这听起来像是@ubzack 的回答,但我认为他在谈论其他内容[相同的 xml 文件名]

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-02-15
          • 1970-01-01
          • 1970-01-01
          • 2011-08-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-11
          相关资源
          最近更新 更多