OnUpdate从未调用-Android小部件

OnUpdate从未调用-Android小部件,android,android-widget,Android,Android Widget,我一直在关注各种小部件教程,如和 我尝试过根据我的目的修改他们的代码,我也尝试过直接复制粘贴。 似乎无论我做什么,我的小部件都不会更新。当它被放置在主屏幕上时,文本保持为创建时使用的静态文本。 我需要这个应用程序做的就是更新4个文本视图,它们将包含在布局中 下面的代码主要是从其中一个教程中复制的。我已经试着调试onUpdate方法,但是断点似乎从未达到 任何帮助都将不胜感激 编辑:我恢复到一个更简单的小部件版本,我在前面的工作中尝试了这个小部件,并用更简单的小部件的代码替换了下面的代码。我对清单

我一直在关注各种小部件教程,如和

我尝试过根据我的目的修改他们的代码,我也尝试过直接复制粘贴。 似乎无论我做什么,我的小部件都不会更新。当它被放置在主屏幕上时,文本保持为创建时使用的静态文本。 我需要这个应用程序做的就是更新4个文本视图,它们将包含在布局中

下面的代码主要是从其中一个教程中复制的。我已经试着调试onUpdate方法,但是断点似乎从未达到

任何帮助都将不胜感激

编辑:我恢复到一个更简单的小部件版本,我在前面的工作中尝试了这个小部件,并用更简单的小部件的代码替换了下面的代码。我对清单进行了Commonware建议的更改。不幸的是,问题依然存在

我的主.java文件如下所示:

public class NetStatWidget extends AppWidgetProvider 
{

public void onUpdate(Context context, AppWidgetManager manager, int[] appWidgetIds)
{   
    ComponentName thisWidget = new ComponentName(context, NetStatWidget.class);
    int[] widgetId = manager.getAppWidgetIds(thisWidget);

    RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.appwidget);
    remoteView.setTextViewText(R.id.textView0, "Hello");
    manager.updateAppWidget(widgetId, remoteView);
}

}
我的舱单:

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

    <uses-sdk android:minSdkVersion="10" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >


            <receiver android:name="NetStatWidget" >
                <intent-filter>
                    <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
                </intent-filter>
                <meta-data 
                    android:name="android.appwidget.provider"
                    android:resource="@xml/providerinfo" />
            </receiver>

    </application>

</manifest>

和我的小部件提供商信息:

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:initialLayout="@layout/main"
android:minWidth="146dip"
    android:minHeight="72dip"
    android:updatePeriodMillis="10000">


您的舱单有误。你声称你有一个
network.widget.AppWidgetProvider
类,而AFAIK,你没有。您有一个名称奇怪的
network.widget.NetworkWidgetActivity
类。您需要在
元素中使用它

此外:

  • this.getApplicationContext()和
    getApplicationContext()替换为
    this

  • 除非您计划在服务(数据库I/O、网络I/O等)中做更严肃的工作,请考虑把所有的逻辑移到<代码> OnUpDATE()/<代码>中,去掉服务,因为它在这里买不到多少东西。(如果您打算保留该服务,请切换到
    IntentService
    并摆脱
    stopSelf()
    ,因为这是为您处理的)

  • 当您要求10秒钟的更新时,最短有效的
    updatePeriodMillis
    是30分钟——调试时请记住这一点

  • int[]widgetId
    NetworkWidgetActivity

  • 服务中的
    onStart()
    已被弃用几年;请改用
    onStart命令()


我根据您的建议更改了清单,但我仍然有相同的问题……我恢复到一个更简单的小部件,我在开始工作时尝试过,做了相同的更改,它也有相同的问题。我编辑了上面的代码,以反映更简单的代码。您看到相同的问题了吗?@Jodron:不,您那里的东西应该有用在Android 3.0及以下版本上。Android 3.1及以上版本上,你需要一个活动来配合你的应用程序小部件——在用户运行该活动之前,你的应用程序小部件将不会收到任何广播。此目录包含另外两个应用程序小部件示例,这两个示例都有效:这很奇怪。我在2.3上运行它,但它仍然不会更新文本。我错了吗想象一下,一旦小部件被放置,“textView0”应该是“Hello”?谢谢你的例子,我会仔细看看这些,看看我是否能弄明白。我想我可能会头脑发热,应该把它变成一个普通的应用程序。@Jodron:“我认为一旦小部件被放置,“textView0”应该是“Hello”?”-在大约一秒钟左右,假设在<代码> RES/Dealths/AppWIDGET.XML<代码>中有一个<代码>文本> @代码+ @ /ID/TrimeVIEW0/COD>。尽管您没有列出的代码,因为没有<代码> WIDGETId < /代码>。考虑暂时切换到代码版本> UpDATEAppWIDGET()。采用
组件名
,这样你就不会在应用程序小部件ID中迷失方向。将updateAppWidget更改为使用组件名修复了它!非常感谢你帮助我克服无知之云。现在再花5个小时教我如何用网络信息填充这些文本视图。再次感谢公民。