OnUpdate никогда не звонил-виджет Android

Я следил за различными учебниками виджетов, такими как этот и этот

Я попытался адаптировать их код к моим целям,и я попробовал прямо вставить копию. Кажется, независимо от того, что я делаю, мой виджет никогда не обновляется. Когда он помещается на главном экране, текст остается статическим текстом, с которым он был создан. Все, что мне нужно это приложение, это обновить 4 TextViews, которые будут содержаться в макете.

ниже код в основном копируется из одного из учебников. Я пробовал отлаживать метод onUpdate, однако точка останова никогда не попадает.

любая помощь была бы весьма признательна.

EDIT: я вернулся к гораздо более простой версии этого виджета, который я пытался ранее в моих усилиях, и заменил код ниже кодом для более простого виджета. Я внес изменения, предложенные CommonsWare в мой манифест. К сожалению, проблема остается.

мой главный .Ява файл выглядит так:

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">

1 ответов


манифест-это неправильно. Вы утверждаете, что у вас есть network.widget.AppWidgetProvider класс, и AFAIK, вы этого не делаете. У вас есть странное имя network.widget.NetworkWidgetActivity класса. Вам нужно использовать это в своем <receiver> элемент.

также:

  • заменить this.getApplicationContext() и getApplicationContext() С this

  • если вы не планируете делать более серьезную работу в службе (ввод-вывод базы данных, сетевой ввод-вывод и т. д.), рассмотрим просто перемещение всей этой логики в onUpdate() и избавиться от сервиса, так как он не очень много покупает вам здесь (и если вы are чтобы сохранить службу, переключитесь на IntentService и избавиться от stopSelf() так как это обрабатывается для вас)

  • пока вы просите 10-секундные обновления, минимальный эффективный updatePeriodMillis 30 минут-просто имейте это в виду при отладке

  • int[] widgetId кажется, не используется в NetworkWidgetActivity

  • onStart() на Service был устаревшим в течение нескольких лет; используйте onStartCommand() вместо