2012-06-29 3 views
12

Код, подобный этому, хорошо работает.Как начать работу с 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); 

Но я хочу, чтобы скрыть эту кнопку BEFOR активности появится, так что я triing послать намерение самого виджета, выполняют компоненты потайных в onReceive() способом, а затем начать деятельность. Проблема в том, что я не могу использовать функцию startActivity() в AppWidget.

Есть ли решение?

ответ

15

Проблема в том, что я не могу использовать функцию startActivity() в AppWidget.

Да, вы можете. Вы передаете объект Context в onUpdate() (или onReceive()) вашего AppWidgetProvider - звоните startActivity() на этом.

+2

ничего, как старые добрые CommonsWare ответить на пятницу днем ​​... приказывая ему нравится это –

+0

Боже мой, я знаю, что это StackOverflow, но я должен сказать: я провел все выходные работает совмещающие класс, чтобы получить контекст от действия к виджету, только потому, что я не заметил, что Контекст прошел в onUpdate, о, дорогой лорд –

13

Благодаря 2 CommonsWare

Существует еще одна вещь, чтобы сделать. context.startActivity(); throws RuntimeException в этом случае.

Вызов startActivity() из-за пределов контекста деятельности требует флаг FLAG_ACTIVITY_NEW_TASK. Это действительно то, что вы хотите?

Таким образом, вы должны установить пометку

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

раньше. не

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); 
Смежные вопросы