2014-06-06 7 views
9

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; 
     } 
    } 
+0

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) –

+0

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). –

+0

@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

Odpowiedz

2

końcu udało mi się rozwiązać mój problem. Odbiorniki dostawcy widżetów muszą być eksportowane !!

<receiver 
     android:name=".widget.HorizontalWidgetProvider" 
     android:exported="true" > 
     <intent-filter> 
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
      <action android:name="com.customEvent" /> 
     </intent-filter> 

     <meta-data 
      android:name="android.appwidget.provider" 
      android:resource="@xml/widget_horizontal_provider" /> 
    </receiver> 
+3

Według tego http: // developer .android.com/guide/topics/manifest/receiver-element.html # wyeksportowana flaga powinna automatycznie ustawić na true, jeśli odbiornik ma filtr intentowy, więc myślę, że to kolejny błąd TouchWiz. –

Powiązane problemy