2012-03-16 19 views
6

śledzę różne Widget Poradniki takich jak this one i this oneonUpdate nie zadzwonił - Android Widget

Próbowałem dostosowania ich kodu do moich celów, i próbowałem prosto-up Kopiuj Wklej. Wygląda na to, że bez względu na to, co robię, mój widget NIGDY nie zostanie zaktualizowany. Po umieszczeniu na ekranie głównym tekst pozostaje jako tekst statyczny, w którym został utworzony. Wszystko, czego potrzebuję ta aplikacja to aktualizacja 4 TextView, które będą zawarte w układzie.

Poniższy kod jest głównie kopiowany z jednego z samouczków. Próbowałem debugowania metody onUpdate, jednak punkt przerwania nigdy nie wydaje się być trafiony.

Każda pomoc byłaby WSPANIAŁA doceniona.

EDYCJA: Powróciłem do znacznie prostszej wersji tego widżetu, którą próbowałem wcześniej w moich wysiłkach i zastąpiłem poniższy kod kodem dla prostszego widżetu. Wprowadziłem zmiany sugerowane przez CommonsWare do mojego manifestu. Niestety problem pozostaje.

Główny plik .java wygląda tak:

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); 
} 

} 

My Oczywisty:

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

A moja Widget Provider Info:

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

Odpowiedz

7

Twój manifest jest źle. Twierdzisz, że masz klasę network.widget.AppWidgetProvider, a AFAIK - nie. Masz dziwnie nazwaną klasę network.widget.NetworkWidgetActivity. Musisz użyć elementu , który jest w swoim elemencie .

również:

  • Wymień this.getApplicationContext() i getApplicationContext() z this

  • Chyba że masz zamiar robić bardziej poważną pracę w służbie (bazy danych I/O, sieć I/O, itd.), rozważ przeniesienie całej tej logiki na numer onUpdate() i pozbycie się usługi, ponieważ tak naprawdę nie kupujesz tu zbyt wiele (i jeśli zamierzasz zostać zamierzasz zachować usługę, przełącz się na IntentService i pozbądź się stopSelf() od który jest obsługiwany przez Ciebie)

  • Podczas gdy prosisz o 10-sekundowych aktualizacjach minimalna skuteczna updatePeriodMillis wynosi 30 minut - po prostu miej to na uwadze podczas debugowania

  • int[] widgetId wydaje się być nieużywany w NetworkWidgetActivity

  • onStart() w Service została uznana za przestarzałą na kilka lat; użyj onStartCommand() zamiast

+0

Zmieniłem manifest na podstawie Twojej sugestii i nadal mam ten sam problem ...Powróciłem do prostszego widżetu, którego próbowałem na początku moich wysiłków, dokonałem tej samej zmiany i mam ten sam problem. Edytowałem kod powyżej odzwierciedlający prostszy kod. Czy widzisz ten sam problem? – Jodron

+0

@Jodron: Nie, to, co tam masz, powinno działać na Androidzie 3.0 i starszym. Android 3.1 lub nowszy, potrzebujesz aktywności, aby przejść do widżetu aplikacji - widżet aplikacji nie będzie odbierać żadnych transmisji, dopóki użytkownik nie uruchomi działania. Ten katalog zawiera dwa kolejne widżety aplikacji, które działają: https://github.com/commonsguy/cw-advandroid/tree/master/AppWidget – CommonsWare

+0

To jest po prostu dziwne. Im uruchomiony na 2.3, i nadal nie będzie aktualizować tekst. Czy myliłem się myśląc, że jak tylko widget zostanie umieszczony "textView0" powinien przeczytać "Hello"? Dzięki za przykłady, przejrzę te i zobaczę, czy nie mogę tego rozgryźć. Myślę, że mógłbym przejechać mi przez głowę i powinien to zrobić zwykłą aplikacją. – Jodron

Powiązane problemy