2010-11-19 25 views
5

Escribo una caja de resonancia de Android que permite al usuario crear múltiples widgets de escritorio, uno para cada sonido. Estoy usando una actividad para que el usuario elija para qué sonido quiere crear el widget. Para cada widget creado, guardo una preferencia compartida en el formato de
key => "WIDGET_FILENAME_"+widgetId, value=> fileName
Para reproducir los sonidos, anulé el método onRecieve en la clase widgetProvider. Cuando se hace clic en el widget de escritorio, se dispara una difusión a este método, cosa que obtiene el ID widget de la intención y luego carga la preferencia compartida asociado con el widget:
Android - Múltiples appWidgets ejecutando diferentes sonidos

 

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

 

El problema es: El moduloid es siempre lo mismo, no se hace clic en ningún otro widget, lo que hace que se reproduzca el mismo sonido.
¿Alguna idea u orientación sobre esto?

Respuesta

7

que tenían el mismo problema y lo resolvió así:

  1. En su AppWidgetProviderClass, declaran su intención de la siguiente manera:

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

    PendingIntent pi = PendingIntent.getActivity(context, appWidgetId, intent, 
                  PendingIntent.FLAG_UPDATE_CURRENT); 
    
  3. En la clase Activity, después de obtener la appWidgetId desea subir Fecha:

    int currentWidgetId = this.getIntent().getIntExtra(
         AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); 
    
  4. ... se puede utilizar una función similar a éste:

    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

¡Genial! realmente me ayudó a resolver el mismo problema que tuve. Lo interesante es que lo que marcó la diferencia fue el uso de appWidgetId como requestCode, mientras que en la documentación dice que nunca se usó ... – Muzikant

+0

@ Rabi, ¿tiene un código más completo que podría compartir? He intentado implementar esto en mi código y simplemente no está funcionando. http://stackoverflow.com/questions/10607518/android-appwidget-multiple-instances – MrGibbage

0

he tenido este problema en este momento y con ese código el problema se ha ido, Piense que el widgetAppId en el Intent y el flag Create new harán que este Intent sea siempre único.

Cuestiones relacionadas