Mam 2 widżety w mojej aplikacji. Oba mają dokładnie te same funkcje, ale z różnymi układami. Działają dobrze na każdym urządzeniu, ale wygląda na to, że wystąpił problem z urządzeniami Samsung. Za każdym razem, gdy publikuję nową wersję aplikacji, widget jest usuwany z ekranu użytkownika. Wygląda na to, że jest to błąd Samsung TouchWiz, ale użytkownik mówi mi, że inne aplikacje nie mają tego problemu. Masz pojęcie o tym, co się dzieje?Widżet znika za każdym razem, gdy aplikacja jest aktualizowana na urządzeniach Samsung
BTW myślałem przez chwilę, że znalazłem sposób, aby naprawić to w tym blogu: https://medium.com/the-wtf-files/the-mysterious-case-of-the-disappearing-widget-f4177a8e2c2b ale ja nie dzwonię ręcznie
updateIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
Zamiast Dzwonię
ComponentName cn = nowa nazwa komponentu (context, clazz); AppWidgetManager.getInstance (kontekst) .updateAppWidget (cn, widoki);
aby zaktualizować moje widgety
więcej mojego kodu:
public static final int layout = R.layout.widget_large_layout;
public static final BitmapQualityEnum thumbnailQuality = BitmapQualityEnum.HIGH_RES;
public static final Class<?> clazz = LargeWidgetProvider.class;
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
if (context != null && appWidgetIds != null && appWidgetIds.length > 0) {
// To prevent any ANR timeouts, we perform the update in a service
context.startService(new Intent(context, LargeWidgetProvider.UpdateService.class));
}
}
@Override
public void onReceive(Context context, Intent intent) {
if (context != null && intent != null) {
boolean doUpdate = true;
if ("android.appwidget.action.APPWIDGET_UPDATE".equals(intent.getAction())) {
final int[] widgetIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);
doUpdate = (widgetIds != null && widgetIds.length > 0);
}
if (doUpdate) {
WidgetProviderHelper.receive(context, intent, clazz, layout, thumbnailQuality);
}
super.onReceive(context, intent);
}
}
public static class UpdateService extends Service {
private int serviceStartId = -1;
@Override
public boolean onUnbind(Intent intent) {
stopSelf(this.serviceStartId);
return true;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
this.serviceStartId = startId;
// Push update for this widget to the home screen
updateData(this);
return START_STICKY;
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// int oldOrientation = this.getResources().getConfiguration().orientation;
// if (newConfig.orientation != oldOrientation) {
// Update the widget) {
updateData(this);
// }
}
@Override
public IBinder onBind(Intent intent) {
// We don't need to bind to this service
return null;
}
}
miałem problemy z widgetami i zanikających (ikon) na urządzeniach Samsung zbyt i okazało się, że włączanie/wyłączanie składników w mojej aplikacji programowo (komponenty do niepowiązanych sama widżety) pomieszane TouchWiz. Jeśli publikujesz więcej kodu swojego widżetu (np. OnReceive/onUpdate, mogę sprawdzić, czy nie są to potencjalne problemy) –
Dostaję argument "Twoja aplikacja ma ten problem, ale inne aplikacje nie" wiele.Rozmieszczenie licznika może być "99,9 % z moich setek tysięcy użytkowników nie ma tego problemu, więc co jest nie tak z twoim urządzeniem? ";-). Jeśli jedna aplikacja z powiedzmy 200 ma problem (0,5%) w porównaniu do 5 urządzeń na 100 000 instalacji, które mają ten problem (0,005%), to oczywiście prawdopodobieństwo, że urządzenie napotkało problem, jest wyższe niż w przypadku aplikacji mającej problem. Oczywiście prawda jest zwykle gdzieś pośrodku i zwykle jest to kombinacja czynników). –
@Emanuel Moecklin Nie ma znaczenia, czy problem dotyczy tylko kilku użytkowników. Tak, może 20 użytkowników zgłosiło problem z 500 KB, ale wszyscy mają wspólne urządzenie Samsung. Większość użytkowników nie używa widżetu aplikacji, a większość użytkowników nie narzeka na problemy, które mogą mieć. Więc tak, chcę naprawić ten problem;) – user1026605