我有一个现有的Android应用程序。 我使用以下内容添加了一个简单的小部件:
<receiver>
块更新了我的清单,该块提供了有关AppWidgetProvider
实施<appwidget-provider>
元素,其中包含height / width / updatePeriod / initialLayout / icon / label attributes ImageView
和TextView
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>
答案 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仍然认为您正在尝试启动活动。
要更改此设置,请转到构建选项
然后将启动选项更改为 Nothing
答案 4 :(得分:-1)
我遇到了同样的问题。事实证明我偶然在两个不同的文件夹中有两个元数据资源xml文件,我的“layout”文件夹和我的“xml”文件夹。它首先在“布局”中找到(空)资源,并将其用于其元数据。
这是一个愚蠢的错误,但请确保您的接收器元数据标记中只有一个该名称的xml文件。另外我认为应该始终在xml文件夹中。
答案 5 :(得分:-1)
我遇到了同样的问题。 我的问题是,当我删除小部件时,我有/layout/main.xml文件!
这听起来像@ubzack的答案,但我认为他谈的是其他的东西[相同的xml文件名]