0

未显示在小部件列表中的小部件 有一个类似的问题,还有许多其他问题的答案基本上是:重启、启动应用程序、等待等。

应用安装后,它会在 Android 2.3 设备上显示小部件。所以代码很好。但它从未出现在 4.3 设备上。所以 4.3 正在寻找不存在的东西。

有没有人有任何额外的提示?

AndroidManifest.xml

    <receiver
        android:name=".WidgetProvider"
        android:label="@string/widget_name">
        <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>

小部件信息.xml

   <?xml version="1.0" encoding="utf-8"?>
   <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" >
    android:minWidth="208dp"
    android:minHeight="56dp"
    android:minResizeHeight="48dp"
    android:minResizeWidth="48dp"
    android:updatePeriodMillis="86400000"
    android:previewImage="@drawable/ic_launcher"
    android:resizeMode="horizontal|vertical"
    android:widgetCategory="home_screen"
    android:configure=""
    android:initialLayout="@layout/widget_layout"
  </appwidget-provider>

WidgetProvider.java

public class WidgetProviderextends AppWidgetProvider {
   DateFormat df = new SimpleDateFormat("hh:mm:ss");

   public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
     final int N = appWidgetIds.length;

     Log.i("ExampleWidget",  "Updating widgets " + Arrays.asList(appWidgetIds));

     // Perform this loop procedure for each App Widget that belongs to this
     // provider
     for (int i = 0; i < N; i++) {
       int appWidgetId = appWidgetIds[i];

       // Create an Intent to launch ExampleActivity
       Intent intent = new Intent(context, ExampleActivity.class);
       PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

       // Get the layout for the App Widget and attach an on-click listener
       // to the button
       RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
       views.setOnClickPendingIntent(R.id.new_post, pendingIntent);

       // To update a label
       views.setTextViewText(R.id.blogname, df.format(new Date()));

       // Tell the AppWidgetManager to perform an update on the current app
       // widget
       appWidgetManager.updateAppWidget(appWidgetId, views);
     }
   }

上面的所有代码主要是用于测试的示例代码,它在 Android 2.3 上运行良好,但在 4.3 上运行良好......在 logcat 输出中运行调试构建时没有错误。

4

3 回答 3

2

啊!最后重做了整个事情,它现在可以工作了——原始代码中有一个字符错字。widget_info.xml 中的 > 字符放置错误。它应该放在所有属性之后,而不是之前。这在 eclipse、构建应用程序和运行应用程序时都没有报告为问题。在 Android 4.2 上,默认设置必须允许小部件安装继续进行,而在 4.3 上,默认设置可能会禁用安装。

上面帖子中的一个小线索 - Stack Overflow 突出显示了 AndroidManifest.xml 中的每个 XML 属性,而不是原始帖子中显示的 widget_info.xml 中的每个 XML 属性。修复 > 字符也修复了 eclipse 中的突出显示。

小部件信息.xml

   <?xml version="1.0" encoding="utf-8"?>
   <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="208dp"
    android:minHeight="56dp"
    android:minResizeHeight="48dp"
    android:minResizeWidth="48dp"
    android:updatePeriodMillis="86400000"
    android:previewImage="@drawable/ic_launcher"
    android:resizeMode="horizontal|vertical"
    android:widgetCategory="home_screen"
    android:configure=""
    android:initialLayout="@layout/widget_layout" >
  </appwidget-provider>
于 2013-10-27T19:33:48.067 回答
0

“带有该错误的示例”在 Android Application Development for Dummies ISBN 978-1-118-38710-8 第 179 页中。

于 2015-02-12T03:30:03.767 回答
0

这可能是因为您的 App 没有任何 Launcher Activity 。在API 11之后,只有那些广播接收器(因此,只有那些widgetProviders)可以注册,他们的 App 才能被 Activity 启动。

于 2013-10-23T23:20:27.047 回答