2015-10-06 12 views
7

Ho riscontrato un comportamento strano su alcuni dispositivi quando si aggiunge una nuova istanza di appwidget nella schermata principale.AppWidget: l'istanza non viene visualizzata dopo che l'attività di configurazione è terminata su alcuni dispositivi

Ho un'applicazione AppWidget con attività di configurazione. Come è stato detto nell'aggiornamento tutorial di appwidget che devo fare da solo.

public static void updateWidgetAndSendIntent (Activity activity, int mAppWidgetId, boolean isUpdate) { 
    updateWidgets(activity); 
    if (!isUpdate) { 
     Intent resultIntent = new Intent(); 
     resultIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId); 
     activity.setResult(Activity.RESULT_OK, resultIntent); 
     activity.finish(); 
    } 
} 

    public static void updateWidgets(Context context) { 
    new ManagerUpdateWidget(context).updateAllWidgetInstances(); 
} 

ManagerUpdateWidget.java

public void updateAllWidgetInstances() { 

    Bitmap widget = getCustomView(context); 

    for (int widgetId : appWidgetIds) { 
     updateCurrentInstance(widgetId, widget); 
    } 
} 

Il fatto è che il Samsung Galaxy Note 2 (GT-N7100) con Android 4.4.2 è tutto OK, ma il Samsung Galaxy Note 3 (SM-N900) con Android 5.0 ho appwidget "fantasma", non appawidget reale sulla schermata principale ma "fantasma" quando non vedi appwidget sullo schermo ma all'interno dell'app appwidget esiste con ID e aggiornamenti regolari. Ho testato la mia app sugli emulatori genymotion (Android 4.3 e 5.0) ma tutto era OK.

Per favore, suggerirmi come risolvere questo bug strano.

+0

Potete chiarire che cosa significa "applauso fantasma"? La risposta –

+0

[questa] (http://stackoverflow.com/a/8866791/4600792) potrebbe aiutarti. –

+0

questo è un altro bug, non mio. Vedo il mio widget in "Elenco dei widget" e posso eseguire l'attività di configurazione ma dopo che la configurazione è terminata non vedo la nuova istanza sulla schermata principale. Nel mio caso si verifica solo su Note 3, su Note 2 in esecuzione è ok –

risposta

0

Gestire i widget "fantasma" è un incubo. Puoi aggiornare tutte le istanze usando updateAppWidget (ComponentName provider, RemoteViews views)?
In base alla documentazione, questo metodo imposterà RemoteViews per tutte le istanze di AppWidget per il provider AppWidget fornito.

AppWidgetManager manager = AppWidgetManager.getInstance(context); 
ComponentName component = new ComponentName(context, MyAppWidgetProvider.class); 
manager.updateAppWidget(component, remoteViews); 
+0

all'interno del metodo updateCurrentInstance che ho suggerito ... Non mi ha aiutato –