OnUpdate НИКОГДА не звонил - Android Widget - PullRequest
6 голосов
/ 17 марта 2012

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

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

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

Любая помощь будет с благодарностью.

РЕДАКТИРОВАТЬ: я вернулся к гораздо более простой версии этого виджетачто я пытался ранее в моих усилиях и заменил код ниже на код для более простого виджета.Я внес изменения, предложенные CommonsWare, в свой манифест.К сожалению, проблема остается.

Мой основной файл .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">

1 Ответ

7 голосов
/ 17 марта 2012

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

Также:

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

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

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

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

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

...