2012-06-29 6 views
12

Kod taki jak ten działa dobrze.Jak rozpocząć aktywność z aplikacji 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); 

Ale chcę ukrywać, że pojawi się przycisk befor aktywności, więc jestem triing wysłać intencję samego widgetu, wykonaj składników ukrywa się w onReceive() metody, a następnie rozpocząć działalność. Problem polega na tym, że nie mogę użyć funkcji startActivity() w AppWidget.

Czy istnieje rozwiązanie?

Odpowiedz

15

Problem polega na tym, że nie można użyć funkcji startActivity() w AppWidget.

Tak, można. Ci są przekazywane w Context obiektu do onUpdate() (lub onReceive()) Twojego AppWidgetProvider - call startActivity() na ten temat.

+2

nic dobrego ol”commonsware odpowiedzieć na piątek po południu ... mówienie to jak jest –

+0

oh my god, wiem, że to stackoverflow ale muszę to powiedzieć: Spędziłem cały weekend wokół podejmowania pracy klasa, która dostarczy mi kontekst z działania do widgetu, tylko dlatego, że nie zauważyłem kontekstu przekazanego w onUpdate, o mój drogi panie –

13

Podziękowania 2 CommonsWare

Jest jeszcze jedna rzecz do zrobienia. context.startActivity(); rzuca w tym przypadku RuntimeException.

Wywołanie funkcji startActivity() z zewnątrz kontekstu działania wymaga flagi FLAG_ACTIVITY_NEW_TASK. Czy to naprawdę jest to, czego chcesz?

Więc trzeba ustawić flagę

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

wcześniej.

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