Od pewnego czasu borykam się z tym problemem. Mam widget, który wyświetla podsumowanie receptury gotowania. Widżet jest klikalny, więc za każdym razem, gdy użytkownik kliknie, otwiera się nowe działanie z pełnym opisem tego przepisu. Problem polega na tym, że czasami po kliknięciu widgetu otwiera się niewłaściwa aktywność. Podam przykład:Android: otwarcie niewłaściwej aktywności z widżetu
- kliknięć użytkowników na widget i aktywności A jest otwarty
- użytkownik rozpoczyna działalność B (np indeksu przepis) z działalności A.
- Użytkownik rozpoczyna działalność C z działalności B.
- Przycisk użytkownika Przycisk Home.
- użytkownik kliknie widget ponownie i aktywność C jest wyświetlany zamiast A
próbowałem ustawienie compibation tych trzech flag, które pomaga w rozwiązywaniu tylko połowa problemu:
openIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
stosując powyżej flagi udało mi się wyświetla prawidłową aktywność (a) aż do I wykonaj następujące czynności:
- Użytkownik otwiera aktywność a z widget
- Użytkownik przenosi się do działalności B i otwiera działalności dla klikając na nowej recepturze
- Nowy przepis jest wyświetlany użytkownikowi
- użytkownik kliknie przycisk Home i kliknięcia na widget.
- Aktywność A jest wyświetlana (prawy), ale z inną recepturą.
- Odtąd, jeśli przejdę do różnych działań B lub C i ponownie kliknę Home, a następnie widget, aktywność A nie zostanie wyświetlona, ale ta, która była widoczna przed naciśnięciem przycisku Home.
Mam nadzieję, że wyjaśniłem to wystarczająco szczegółowo. Byłbym bardzo wdzięczny za twoją pomoc, ponieważ to doprowadza mnie do szału!
Aktualizacja:
To mój pendingIntent:
Intent openIntent = new Intent(context, ProfanityDefinition.class);
openIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
openIntent.setData(Uri.parse(openIntent.toUri(Intent.URI_INTENT_SCHEME)));
Bundle bundle = new Bundle();
bundle.putBoolean("widgetRequest", true);
openIntent.putExtras(bundle);
PendingIntent openPendingIntent = PendingIntent.getActivity(context, 0, openIntent, PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.widget_content, openPendingIntent);
Dzięki
Ponieważ zadanie dla ciebie działa już działa, 'FLAG_ACTIVITY_NEW_TASK' spowoduje przeniesienie działającego działania na pierwszy plan. Ustaw 'android: taskAffinity =" "' w AndroidManifest.xml dla działania 'ProfanityDefinition', aby uruchomić go w oddzielnym zadaniu. Następnie dostaniesz nową instancję po kliknięciu widgetu. –
To nie pomogło ... Nadal dostaję aktywność B zamiast A lub A z inną zawartością ... to jest dziwne – Marqs
To działa, sprawdź swój kod. Czy używasz flagi Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP' jako flagi? A jaka jest nazwa klasy "działalności A"? –