小部件未在小部件列表中显示

时间:2013-08-14 17:03:01

标签: java android android-widget

我有一个应用程序,并决定添加一个小部件,我已经按照它的所有官方文档,但当我在我的Galaxy Nexus上安装该应用程序时,该小部件不会出现在应用程序/小部件中列表。

的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.dysign.livetubecountdown"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="11"
    android:targetSdkVersion="16" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

    <activity
        android:name="com.dysign.livetubecountdown.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <receiver android:name="com.dysign.livetubecountdown.Widget" android:label="@string/app_name" android:icon="@drawable/ic_launcher">
        <intent-filter>
            <action android:name="android.appwidget,action.APPWIDGET_UPDATE" />
        </intent-filter>
        <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_provider" />
    </receiver>

</application>

widget_provider.xml

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

widget_main.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="Large Text"
            android:id="@+id/widgetTextView"/>
</FrameLayout>

Widget.java

package com.dysign.livetubecountdown;

import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.widget.RemoteViews;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.Timer;
import java.util.TimerTask;

public class Widget extends AppWidgetProvider {

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerClass(context, appWidgetManager), 1, 1000);
    }

    private class TimerClass extends TimerTask {
        RemoteViews remoteViews;
        AppWidgetManager appWidgetManager;
        ComponentName thisWidget;
        DateFormat format = SimpleDateFormat.getTimeInstance(SimpleDateFormat.MEDIUM, Locale.getDefault());

        public TimerClass(Context context, AppWidgetManager appWidgetManager) {
            this.appWidgetManager = appWidgetManager;
            remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_main);
            thisWidget = new ComponentName(context, Widget.class);
        }

        @Override
        public void run() {
            remoteViews.setTextViewText(R.id.widgetTextView, "TIME = " +format.format(new Date()));
            appWidgetManager.updateAppWidget(thisWidget, remoteViews);
        }
    }
}

我一直在网上试图解决这个问题,但我尝试的每一个建议都不起作用。此外,LogCat中没有任何错误或任何与小部件相关的提及。

非常感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:5)

问题证明是清单中的拼写错误。

<action android:name="android.appwidget,action.APPWIDGET_UPDATE" />

应该是:

<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />

注意android.appwidget之后的逗号。

答案 1 :(得分:2)

我几次经历过同样的问题。

帮助我的是重新启动手机,之后小部件开始出现在小部件列表中。为什么会发生这种情况我不知道我已经用谷歌搜索并发现许多人有类似的问题,甚至发生用户从市场安装应用程序并且小部件没有出现在列表中。

其他人提供的一些解决方案:重新安装应用程序(对我没用),几次启动主要活动(也没有),重新启动手机(这个对我有用,因为它甚至在开发期间发生)小部件工作正常好几天,当从eclipse重新安装时,突然它在列表中丢失了???重新启动手机帮助了我。

希望它有所帮助!