1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

updateAppWidget - verweigert den Dienst

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Neeldarax, 20.05.2012.

  1. Neeldarax, 20.05.2012 #1
    Neeldarax

    Neeldarax Threadstarter Erfahrener Benutzer

    Beiträge:
    170
    Erhaltene Danke:
    31
    Registriert seit:
    07.12.2010
    Hi,

    ich schreibe ein Widget. Um das manuelle Aktualiseren/Veränder der Daten zu bewerkstelligen, nutze ich Buttons.

    Die Events und so läuft alles richtig durch, aber beim updateAppWidget passiert nichts.

    Im Debug und nach paar Installationen hat es schon mal geklappt.
    Aber spätestens, wenn ich das Widget neu auf den Home-Screen hinzufüge, ist wieder tote Hose.

    Das ist mein Ausschnitt aus dem Service, der das Widget updatet:
    Code:
    @Override
    public void onStart(Intent intent, int startId) {
        int[] allWidgetIds = intent
                .getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);
    
        AppWidgetManager appWidgetManager = AppWidgetManager
                .getInstance(this.getApplicationContext());
    
        if (allWidgetIds != null) {
            //Das Layout, was auf geladen wird.
            RemoteViews remoteViews = new RemoteViews(this
                    .getBaseContext().getPackageName(),
                    R.layout.widget_view_sites);
    
            //...
    
            if (dataObject != null) {
                //Hier werden die Texte gesetzt. Kein NPE, kein leer String...
                String header = dataObject.getHeader();
                String body = dataObject.getBody();
                String footer = dataObject.getFooter();
    
                //IDs sind vorhanden, richtiges Layout geladen
                remoteViews.setTextViewText(R.id.textHeader, header);
                remoteViews.setTextViewText(R.id.textBody, body);
                remoteViews.setTextViewText(R.id.textFooter, footer);
    
            } else {
                //...
            }
            
            //auch mit jeder einzelnen WidgetID oder mit ComponentName versucht - gleiches verhalten
            appWidgetManager.updateAppWidget(allWidgetIds, remoteViews);
        }
    
        stopSelf(); //auch schon ma rausgenommen oder eine Zeile tiefer verschoben
        super.onStart(intent, startId);
    }
    //... ist nur auskommentierter Code, belanglos für das Geschehen.

    Übliches Verhalten ist, dass er Einmal Läuft und die Daten aktualisert.
    Danach, ob per Button oder Updateinterval, werden die Texte nicht in den TextViews aktualisiert.

    Hat jemand damit Erfahrung oder kann mir Anhaltspunkte nennen, wo ich suchen/verändern kann.

    regards
     
  2. strider, 20.05.2012 #2
    strider

    strider Erfahrener Benutzer

    Beiträge:
    208
    Erhaltene Danke:
    45
    Registriert seit:
    30.09.2011
    Phone:
    Nexus S
    Bau vor und hinter jede if anweisung eine Log Ausgabe ein dann siehst schon wie weit er kommt und ob da überhaupt was aufgrufen wird.
     
  3. Neeldarax, 20.05.2012 #3
    Neeldarax

    Neeldarax Threadstarter Erfahrener Benutzer

    Beiträge:
    170
    Erhaltene Danke:
    31
    Registriert seit:
    07.12.2010
    Hi strider,

    da ich das schon im Debugmodus verfolgt habe, war die Ausgabe weniger aufschlussreich.

    Im Log kann ich verfolgen, wie die Daten wechseln und auch beim updateAppWidget(..) mit dem RemoteView ankommen.

    Den wechsel der Texte kann ich aber auf meinem Widgets nicht verfolgen :(


    Ein weiterer Punkt, der mir auf gefallen ist, ist, dass die PendingIntents für das onClick zwar durchlaufen, aber offensichtlich nicht immer sofort ausgeführt werden.
    Eine reinstallation aus Eclipse behebt das Problem... nur, wenn ich das Widget entferne und wieder auf den Home-Screen hinzufüge.. alte Laie -.-

    Mein Konzept muss ich wohl überarbeiten.

    Ich suche weiter Tutorials für Widget mit multiple onClicks.
    Beispiele aus developer.android...., Vogella, stackoverflow(einige) sind mir bereits geläufig.

    regards
     
  4. strider, 20.05.2012 #4
  5. Neeldarax, 21.05.2012 #5
    Neeldarax

    Neeldarax Threadstarter Erfahrener Benutzer

    Beiträge:
    170
    Erhaltene Danke:
    31
    Registriert seit:
    07.12.2010
    QUELLE

    knocked out by API :blink:

    Also der Bestfall (APP installieren, Widget hinzufügen, Buttons drücken) funktioniert.

    Der DAU-Fall scheitert. zB APP installieren, Widget hinzufügen, merken falscher Screen, Widget entfernen, noch ma Widget hinzufügen...
    PendingIntens, die für die Click-Events verantwortlich sind, reagieren nicht, da der RemoteView gecached ist und die ID des neuen Widget nicht kennt. (Wenn ich es so richtig verstanden habe)

    Das Thema eilt für mich nicht, daher stampfe ich es ein. Wollt euch nur über das Resultat informieren :)

    regards
     

Diese Seite empfehlen