2014-06-06 10 views
9

Ich habe 2 Widgets in meiner App. Beide haben genau die gleichen Funktionen, aber unterschiedliche Layouts. Sie funktionieren auf jedem Gerät einwandfrei, aber auf Samsung-Geräten scheint es ein Problem zu geben. Jedes Mal, wenn ich eine neue Version der App veröffentliche, wird das Widget vom Benutzerbildschirm entfernt. Es sieht so aus, als wäre dies ein Samsung TouchWiz Bug, aber der Benutzer sagt mir, dass andere Apps dieses Problem nicht haben. Irgendeine Idee von was passiert? BTWWidget verschwindet jedes Mal, wenn die App auf Samsung-Geräten aktualisiert wird

Ich dachte für einen Moment, dass ich einen Weg gefunden, um es in dieser Blog-Post zu beheben: https://medium.com/the-wtf-files/the-mysterious-case-of-the-disappearing-widget-f4177a8e2c2b aber ich bin nicht manuell

updateIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); 

Aufruf Stattdessen Ich rufe

ComponentName cn = neuer Komponentenname (context, clazz); AppWidgetManager.getInstance (Kontext) .updateAppWidget (cn, Ansichten);

um meine Widgets

Mehr von meinem Code zu aktualisieren:

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

ich Probleme mit verschwindenden Widgets hatte (und Icons) auf Samsung-Geräten zu und es stellte sich heraus, dass die Aktivierung/Komponenten in meiner App deaktivieren TouchWiz programmatisch (Komponenten in keinem Zusammenhang mit den Widgets selbst) durcheinander. Wenn Sie mehr von Ihrem Widget Code (wie der onReceive/onUpdate) ich könnte es auf mögliche Probleme überprüfen. –

+0

Ich bekomme das Argument "Ihre App hat dieses Problem, aber andere Anwendungen nicht" viel. Das Gegenargument könnte "99.9 % meiner hunderttausenden Benutzer haben dieses Problem nicht, also was ist mit Ihrem Gerät los? ";-). Wenn eine App aus, sagen wir, 200 ein Problem (0,5%) im Vergleich zu 5 Geräten von 100'000 Installationen mit diesem Problem (0,005%) hat, ist die Wahrscheinlichkeit, dass das Gerät ein Problem hat, höher als die der App Problem. Natürlich ist die Wahrheit irgendwo dazwischen und es ist normalerweise eine Kombination von Faktoren). –

+0

@Emanuel Moecklin ist es egal, ob nur ein paar Benutzer das Problem haben. Ja, vielleicht haben 20 Benutzer das Problem von 500K + gemeldet, aber alle haben ein Samsung-Gerät gemeinsam. Außerdem verwenden die meisten Benutzer das App-Widget nicht und die meisten Benutzer beschweren sich nicht über mögliche Probleme. Also ja ich möchte dieses Problem beheben;) – user1026605

Antwort

2

ich es endlich geschafft, mein Problem zu lösen. Die Empfänger des Widget-Providers müssen exportiert werden !!

<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

Nach diesem http: // Entwickler Das exportierte Flag sollte automatisch auf "true" gesetzt werden, wenn der Empfänger einen Intent - Filter hat, also denke ich, dass es sich um einen anderen TouchWiz Bug handelt. –

Verwandte Themen