模拟器中的Android小部件

时间:2010-10-28 22:03:39

标签: android android-emulator android-widget

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

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

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

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

<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>

6 个答案:

答案 0 :(得分:6)

清单中的接收器标签是否具有正确的intent-filter和元数据?它看起来应该像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>

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

修改:<receiver>代码也需要位于<application>代码内。

答案 1 :(得分:1)

如果您的应用已安装在SD卡上,则您的所有小部件都会静静地拒绝显示在列表中。 (如果您使用的是外部存储设备,那么文档会清楚地表明您不能拥有小部件。)

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

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

答案 2 :(得分:1)

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

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

在最终让它出现在所有模型和模拟器中之前,我经历了很长一段时间,但请耐心等待,确保您没有遗漏任何内容并设置需要存在的值。请记住,有些手机会缓存窗口小部件列表,并且在您启动第一个活动或重新启动手机之前可能无法更新。

希望有所帮助。

萨姆

答案 3 :(得分:0)

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

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

Example

然后将启动选项更改为 Nothing

Example

答案 4 :(得分:-1)

我遇到了同样的问题。事实证明我偶然在两个不同的文件夹中有两个元数据资源xml文件,我的“layout”文件夹和我的“xml”文件夹。它首先在“布局”中找到(空)资源,并将其用于其元数据。

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

答案 5 :(得分:-1)

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

这听起来像@ubzack的答案,但我认为他谈的是其他的东西[相同的xml文件名]