2012-06-29 19 views
12

Código como este funciona bien.¿Cómo iniciar la actividad desde el AppWidget de Android?

Intent configIntent = new Intent (context, WidgetConfigActivity.class); 
    configIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
    PendingIntent pIntent = PendingIntent.getActivity(context, 0, configIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    remoteView.setOnClickPendingIntent(R.id.btn, pIntent); 

Pero yo quiero ocultar ese botón se acaben de actividad se muestran, así que estoy triing para enviar la intención de la propia Reproductor, realice los componentes escondidos en onReceive() método y luego iniciar la actividad. El problema es que no puedo usar la función startActivity() en AppWidget.

¿Hay alguna solución?

Respuesta

15

El problema es que no puedo usar la función startActivity() en AppWidget.

Sí, puedes. Se le pasa en un objeto Context en onUpdate() (o onReceive()) de su AppWidgetProvider - llame al startActivity() en eso.

+2

nada como un buen ol' commonsware contestar en un viernes por la tarde ... decir las cosas como es –

+0

oh Dios mío, sé que esto es stackoverflow pero tengo que decir esto: pasé un fin de semana de trabajo en torno a hacer una clase para obtener un contexto de una actividad para el widget, solo porque no noté que el Contexto pasó en la actualización, oh querido señor –

13

Gracias 2 CommonsWare

Hay una cosa más que hacer. context.startActivity(); arroja RuntimeException en este caso.

Calling startActivity() desde fuera de un contexto de actividad requiere la bandera FLAG_ACTIVITY_NEW_TASK. ¿Es esto realmente lo que quieres?

por lo que necesita para establecer la bandera

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

antes.

5
// on receive function use this for new activity start 
       Intent intent = new Intent (context, AppWdget.class); 
       intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); 
       context.startActivity (intent); 
Cuestiones relacionadas