2012-06-29 15 views
12

Codice come questo funziona bene.Come avviare Activity da Android AppWidget?

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); 

Ma voglio nascondere quel pulsante befor l'attività appare, quindi sono triing inviare intento al widget stesso, eseguire i componenti nascosti in onReceive() metodo e quindi avviare l'attività. Il problema è che non posso usare la funzione startActivity() in AppWidget.

C'è qualche soluzione?

risposta

15

Il problema è che non è possibile utilizzare la funzione startActivity() in AppWidget.

Sì, è possibile. Sei passato in un oggetto Context in onUpdate() (o onReceive()) del tuo AppWidgetProvider - chiama startActivity() su quello.

+2

niente come un buon ol' commonsware rispondere in un pomeriggio di venerdì ... raccontare le cose come stanno –

+0

oh mio dio, so che questo è StackOverflow ma io devo dire questo: ho passato un intero fine settimana di lavoro in giro a fare una classe per farmi un contesto da un'attività al widget, solo perché non ho notato il Contesto passato nell'UpUpdate, oh caro signore –

13

Grazie 2 CommonsWare

C'è ancora una cosa da fare. context.startActivity(); getta RuntimeException in questo caso.

Calling startActivity() al di fuori di un contesto di attività richiede la bandiera FLAG_ACTIVITY_NEW_TASK. E 'davvero ciò che vuoi?

quindi è necessario impostare il flag

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

prima.

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); 
Problemi correlati