То, что я хотел бы сделать, очень похоже на приложение "ColorNote". По сути, у меня есть виджеты приложений, которые могут запускать действие «EditNote», и мне нужен только один экземпляр действия в задаче; Скажем, если пользователь 1. нажимает на виджет А, который запускает «EditNote» A, 2. идет домой, 3. нажимает на виджет B, который запускает «EditNote» B, 4. затем нажимает кнопку НАЗАД, пользователь должен приземлиться на домашнем экране. Я храню rowIds в базе данных sqlite и передаю интересующий идентификатор строки в намерении получить действие «EditNote».
Я попытался установить для "launchMode" значение "singleTask" или "singleInstance", и Android будет обходить "onCreate" и напрямую вызывать "onNewIntent" (что ожидается, как это задокументировано), но проблема заключается в каждом Затем «EditNote» получает то же намерение, которое содержит тот же rowId, поэтому вместо этого будет запущен шаг 3 над «EditNote» A. (Если для «launchMode» задано «standard», то задача будет содержать несколько действий «EditNote» с правильными идентификаторами.)
Это фрагмент кода приложения appWidgetProvider:
int rowId = dataAccess.getIdByAppWidgetId(appWidgetId);
intent.putExtra(NoteColumns.ID, ((Integer)rowId).longValue());
PendingIntent pending = PendingIntent.getActivity(context, appWidgetId,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.appwidget, pending);
appWidgetManager.updateAppWidget(appWidgetId, views);
Код в активности "EditNote":
@Override
protected void onNewIntent(Intent intent) {
Log.d(TAG, "\\\\\\new intent: "
+" the rowId is "+getIntent().getLongExtra(NoteColumns.ID, -1));
super.onNewIntent(intent);
}