2010-11-19 10 views
5

Sto scrivendo una scheda madre Android che consente all'utente di creare più widget desktop, uno per ogni suono. Sto usando un'attività per l'utente per scegliere il suono per il quale vuole creare il widget. Per ogni widget creato, memorizzo una preferenza condivisa nel formato
key => "WIDGET_FILENAME_"+widgetId, value=> fileName
Per riprodurre i suoni, ho eseguito l'override del metodo onRecieve nella classe widgetProvider. Quando il widget del desktop viene cliccato, si innesca una trasmissione a questo metodo, wich ottiene il widget di ID dal intento e quindi carica la preferenza condivisa associata con il widget:
Android - Più appWidgets che riproducono suoni diversi

 

int appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, 
            AppWidgetManager.INVALID_APPWIDGET_ID); 

 

Il problema è: Il widgetId è sempre uguale, non si fa clic sul widget, causando la riproduzione dello stesso suono.
Qualche idea o guida su questo?

risposta

7

Ho avuto lo stesso problema e risolto in questo modo:

  1. Nella tua AppWidgetProviderClass, dichiarare il vostro intento nel modo seguente:

    Intent intent = new Intent(context, YourActivity.class) 
         .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) 
         .putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
    
  2. ... e PendingIntent

    PendingIntent pi = PendingIntent.getActivity(context, appWidgetId, intent, 
                  PendingIntent.FLAG_UPDATE_CURRENT); 
    
  3. Nella classe Attività, dopo aver ricevuto l'appWidgetId si desidera Data:

    int currentWidgetId = this.getIntent().getIntExtra(
         AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); 
    
  4. ... è possibile utilizzare una funzione simile a questa:

    private void updateWidgetView() { 
        views = new RemoteViews(YourWidget.class.getPackage().getName(), 
              R.layout.main_widget); 
        mgr = AppWidgetManager.getInstance(this); 
        views.setTextViewText(R.id.some_text_view, someText); 
        // Tell the AppWidgetManager to perform an update on the current App Widget 
        mgr.updateAppWidget(currentWidgetId, views); 
    } 
    
+1

Ottimo! mi ha davvero aiutato a capire lo stesso problema che avevo. La parte interessante è che ciò che ha fatto la differenza è stato utilizzare l'appWidgetId come requestCode mentre nella documentazione dice che non viene mai usato ... – Muzikant

+0

@Rabi, hai un codice più completo che potresti condividere? Ho cercato di implementarlo nel mio codice e non funziona. http://stackoverflow.com/questions/10607518/android-appwidget-multiple-instances – MrGibbage

0

Ho avuto questo problema in questo momento e con quel codice il problema è andato, penso che il widgetAppId in the Intent e il flag Create new renderanno questo Intent sempre unico.

Problemi correlati