Ответ 1
Проблема в том, что я не могу использовать функцию startActivity() в AppWidget.
Да, вы можете. Вы передаёте объект Context
в onUpdate()
(или onReceive()
) вашего AppWidgetProvider
- вызов startActivity()
на этом.
Код, подобный этому, хорошо работает.
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);
Но я хочу скрыть эту кнопку до того, как будет отображаться активность, поэтому я собираюсь отправить намерение самому виджету, выполнить скрытие компонентов в методе onReceive()
, а затем начать работу. Проблема в том, что я не могу использовать функцию startActivity()
в AppWidget.
Есть ли какое-либо решение?
Проблема в том, что я не могу использовать функцию startActivity() в AppWidget.
Да, вы можете. Вы передаёте объект Context
в onUpdate()
(или onReceive()
) вашего AppWidgetProvider
- вызов startActivity()
на этом.
Спасибо 2 CommonsWare
Есть еще одна вещь. context.startActivity();
бросает RuntimeException
в этом случае.
Вызов функции startActivity() извне контекста действия требует флаг FLAG_ACTIVITY_NEW_TASK. Это действительно то, что вы хотите?
Итак, вам нужно установить флаг
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
раньше.
// 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);