22

我正在使用小部件升级我的应用程序。这不是我做的第一个小部件。我总是遇到奇怪的问题,但小部件最终出现在列表中。

这是我到目前为止所做的:

  • 创建了 widget_layout.xml
  • 创建了 widget_info.xml
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"  
    android:minWidth="110dp"
    android:minHeight="30dp"
    android:updatePeriodMillis="86400000"
    android:initialLayout="@layout/widget_layout"
    android:resizeMode="none">
</appwidget-provider>
  • 创建 WidgetProvider 类
  • 在该部分中添加了小部件到清单<application>(由于某种原因无法在此处粘贴清单片段,它只是没有显示,请参见此处的代码)

不过,在小部件列表中找不到小部件。我正在真实设备上调试应用程序。我正在使用库项目,但小部件文件却都在我直接运行的项目中。这里会发生什么?

4

8 回答 8

29

遇到类似的问题,这就是发生在我身上的事情。在添加 minResizeHeight 之前,下面的 Widget 从未出现在 Widget 抽屉中。很奇怪,但可能是可调整大小的小部件所必需的。本来可以更友好的。

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/pmt_schedule_scroll_widget"
android:minHeight="146dip"
android:minResizeHeight="73dp"
android:minWidth="146dip"
android:resizeMode="vertical"
android:updatePeriodMillis="0" />
于 2013-07-08T03:44:29.157 回答
23

这种问题可能发生在两种情况下。两者都在上面得到了回答,这是一个完整的答案,我遇到了这两种情况并解决了它们。

场景1

如果应用程序在 manifest 中指定了 android:installLocation="preferExternal" 参数,则应用程序将安装在外部内存中,并且不会显示在小部件列表中。此外,如果您让手机将所有应用程序安装在 sd 卡上,也会发生这种情况。

解决方案

转到设置-> 应用程序-> YourApp 然后“移动到手机”。这会将应用程序移动到您的手机内存中,现在您可以在小部件列表中看到小部件

情景2

如果上述修复没有解决您的问题,那么您的设备可能是 android 4.XX 版本。

然后你必须在 widget_info.xml 文件中至少设置以下参数

解决方案2

安卓:minHeight="XXXdp" 安卓:minWidth="XXXdp"

于 2013-08-20T06:12:07.990 回答
9

问题是android:installLocation="preferExternal"

如果应用程序安装在 SD 上,它会以某种方式导致小部件列表出现问题

于 2013-04-12T07:35:03.273 回答
8

我尝试了所有可能的解决方案,但对我没有任何效果......最后我解决了它。

就我而言,问题是想多了:我认为在元数据标签中,我们需要为提供者定义一个唯一名称(例如:“com.example.myprovider”)以及指向 xml 资源的链接。

错误的:

<meta-data
      android:name="com.example.myprovider"
      android:resource="@xml/widget_info" />

正确的:

<meta-data
  android:name="android.appwidget.provider"
  android:resource="@xml/widget_info" />
于 2015-12-17T13:39:59.923 回答
5

您需要在清单文件中注册一个 BroadcastReceiver。例如:

<receiver
   android:icon="@drawable/icon"
   android:label="Example Widget"
   android:name="MyWidgetProvider" >
   <intent-filter >
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
   </intent-filter>

   <meta-data
      android:name="android.appwidget.provider"
      android:resource="@xml/widget_info" />
</receiver> 

我从http://www.vogella.com/articles/AndroidWidgets/article.html借用了这段代码

查看完整教程的链接

于 2013-04-11T13:14:20.473 回答
2

经过数小时的搜索并未能解决,我决定打开一个可以工作的小部件示例项目并逐项比较以查看问题所在,最后,我解决了在我的 res/xml/widget_info 中添加了以下行.xml:

android:minHeight="XXXdp"
android:minResizeHeight="XXXdp"
android:minResizeWidth="XXXdp"
android:minWidth="XXXdp"

其中 XXX 是某个值。

于 2013-06-29T09:39:33.683 回答
2

就我而言,问题出在接收器内的意图过滤器中。

错误的:

<intent-filter>
    <action android:name="APPWIDGET_UPDATE" />
</intent-filter>

正确的:

<intent-filter>
    <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
于 2019-01-11T18:23:04.077 回答
1

在我的情况下,它是 minWidth,它太大了,只需放一个较小的 dp,它也适用于 minHeight 太高!

于 2020-09-23T19:31:57.547 回答