2015-05-18 26 views
9

Moja aplikacja obsługuje zainstalowane przez użytkownika widżety, takie same jak aplikacja uruchamiająca.Niektóre widgety innych firm przestają się aktualizować po aktualizacji aplikacji

Po związaniu widgetu wszystko działa poprawnie. Widżety są tworzone, aktualizowane automatycznie, mogę klikać, aby poruszać się po wewnętrznych widokach.

Wszystko działa poprawnie, dopóki nie zaktualizuję aplikacji ze sklepu Play (lub ręcznie za pomocą podpisanego pliku APK).

Po aktualizacji widżety nadal się wyświetlają, ale nie będą już aktualizowane. Niektóre widgety działają, gdy je klikam, ale widok utknął i nigdy się nie aktualizuje, dopóki nie ponownie utworzę widgetu (zdobędę nowy identyfikator i powiązam go).

Próbowałem zmuszając aktualizacji przy użyciu

Intent intent = new Intent(); 
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); 
intent.setComponent(appWidgetInfo.provider); 
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] 
       {appWidgetId}); 
context.sendBroadcast(intent); 

ale to nie pomaga ...

chciałem spróbować wymuszoną aktualizację kliknięcia, ale nie mogłem znaleźć żadnego sposób na uzyskanie Widoku RemoteViews (ponieważ nie jest to mój widget, po prostu go hostuję).

RemoteViews views = 
     new RemoteViews(context.getPackageName(),R.layout.mywidget_layout); 

Intent updateIntent = new Intent(); 
updateIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); 
updateIntent.putExtra(myWidgetProvider.WIDGET_IDS_KEY, ids); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(
     context, 0, updateIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

views.setOnClickPendingIntent(R.id.view_container, pendingIntent); 

realizowane również AppWidgetProvider słuchać zmian tożsamości Widgety (APPWIDGET_HOST_RESTORED), ale to nie sprawdzony na moim aktualizacji aplikacji.

Moim następnym krokiem byłoby odtworzenie wszystkich widżetów po aktualizacji aplikacji, ale naprawdę wolę tego nie robić.

Doceniam każdą pomoc!

+0

Co: testowane urządzenie? Wersja OS? launcher (np. Samsung touch wiz itp.)? –

+0

Wiele urządzeń ... Moja aplikacja została opublikowana. Wielu użytkowników zgłasza ten problem i udało mi się ją odtworzyć na 3 różnych urządzeniach, w wersji Androida 4.1 lub nowszej. –

+0

@downvoter proszę skomentuj, dlaczego mogę poprawić moje pytanie. –

Odpowiedz

5

Rozwiązany.

Ostatnią rzeczą, którą chciałem zrobić, była prawdopodobnie pierwsza rzecz, którą powinienem był wypróbować. Przejdę do ponownego tworzenia widżetów i odkryłem, że nie muszę ich w pełni odtwarzać, wystarczy ponownie zadzwonić pod numer bindAppWidgetIdIfAllowed() z tym samym identyfikatorem Widget, który już mam.

Metoda będzie return true, jeśli wszystko jest nadal w porządku, a jeśli nie, to widżet może nie być już zainstalowany lub trzeba wywołać ekran konfiguracji.

3
  1. Pewna funkcjonalność systemu Android ulegnie awarii, jeśli widget jest zainstalowany na karcie SD. Spróbuj przenieść go do pamięci urządzenia i przeprowadź test.

  2. upewnij się, że używasz unikalnych kluczy z putExtra (MyWidgetProvider.WIDGET_ID_KEY, ids);

  3. Nie używaj putExtra (AppWidgetManager.EXTRA_WIDGET_IDS, ids);

+0

Dzięki, ale to nie jest problem. Zdarza się to głównie z widżetami systemowymi, takimi jak widget Muzyka Google Play. –

+0

2-3 są istotne tylko, jeśli masz AppWidgetProvider i zastępujesz jego metodę onReceive()/onUpdate(), której nie mam, ponieważ nie mam własnego widgetu. Po prostu hostuję widżety. Czy w moim przypadku powinienem również utworzyć mój własny AppWidgetProvider? –

+0

Może spojrzeć na https://gist.github.com/rock3r/9809139 –

Powiązane problemy