Android 10 (poziom interfejsu API 29) i nowsze wersje nakładają ograniczenia dotyczące tego, kiedy aplikacje mogą uruchamiać czynności w tle. Te ograniczenia pomagają zminimalizować przerwy w pracy użytkownika i pozwalają mu lepiej kontrolować to, co wyświetla się na ekranie.
.W tym przewodniku omawiamy powiadomienia jako alternatywę dla uruchamiania działań w tle. Zawiera on też listę konkretnych przypadków, w których ograniczenia nie mają zastosowania.
Wyświetlanie powiadomień
W prawie wszystkich przypadkach aplikacje działające w tle muszą wyświetlać powiadomienia o wypadkach czasu, aby przekazywać użytkownikom pilne informacje, zamiast bezpośrednio uruchamiać działanie. Takie powiadomienia obejmują obsługę połączeń przychodzących lub aktywnego alarmu zegara.
Ten system powiadomień i przypomnień ma wiele zalet dla użytkowników:
- Podczas korzystania z urządzenia użytkownik widzi powiadomienie z możliwością odpowiedzi. Użytkownik zachowuje bieżący kontekst i ma kontrolę nad treściami wyświetlanymi na ekranie.
- Powiadomienia o charakterze pilnym są zgodne z ustawieniami użytkownika w sekcji Nie przeszkadzać. Na przykład użytkownicy mogą zezwalać na połączenia tylko od określonych kontaktów lub od osób, które często do nich dzwonią, gdy tryb Nie przeszkadzać jest włączony.
- Gdy ekran urządzenia jest wyłączony, intencja pełnoekranowa uruchamia się natychmiast.
- Na ekranie Ustawienia urządzenia użytkownik może sprawdzić, które aplikacje wysłały ostatnio powiadomienia, w tym z określonych kanałów powiadomień. Na tym ekranie użytkownik może kontrolować ustawienia powiadomień.
Kiedy aplikacje mogą uruchamiać aktywności
Aplikacje działające na Androidzie 10 lub nowszym mogą uruchamiać czynności, gdy spełniony jest co najmniej 1 z tych warunków:
- Aplikacja ma widoczne okno, np. aktywność na pierwszym planie.
- Aplikacja ma aktywność w grupie aktywności zadania na pierwszym planie.
Aplikacja ma aktywność w dodatkowym stosie istniejącego zadania na ekranie Ostatnie.
Aplikacja ma aktywność, która rozpoczęła się bardzo niedawno.
Aplikacja o nazwie
finish()
była ostatnio aktywna. Ma to zastosowanie tylko wtedy, gdy w momencie wywołania funkcjifinish()
aplikacja miała aktywność na pierwszym planie lub aktywność w grupie zadań na pierwszym planie.Aplikacja ma jedną z tych usług, która jest powiązana z systemem. Te usługi mogą wymagać uruchomienia interfejsu użytkownika.
AccessibilityService
AutofillService
CallRedirectionService
HostApduService
InCallService
TileService
(nie dotyczy Androida 14 (poziom 34 interfejsu API) i nowszych wersji)VoiceInteractionService
VrListenerService
.
Aplikacja ma usługę, która jest powiązana z inną, widoczną aplikacją. Aby aplikacja mogła rozpocząć działania, aplikacja powiązana z usługą musi pozostać widoczna w tle.
Aplikacja otrzymuje powiadomienie
PendingIntent
od systemu. W przypadku oczekujących intencji dotyczących usług i odbiorników transmisji aplikacja może uruchamiać działania przez kilka sekund po wysłaniu oczekującej intencji.Aplikacja otrzymuje
PendingIntent
wysłany z innej, widocznej aplikacji.Aplikacja otrzymuje transmisję systemową, w ramach której powinna uruchomić interfejs użytkownika. Przykłady:
ACTION_NEW_OUTGOING_CALL
iSECRET_CODE_ACTION
. Aplikacja może uruchamiać czynności przez kilka sekund po wysłaniu transmisji.Aplikacja jest powiązana z urządzeniem sprzętowym za pomocą interfejsu
CompanionDeviceManager
API. Ten interfejs API umożliwia aplikacji uruchamianie działań w odpowiedzi na działania podejmowane przez użytkownika na sparowanym urządzeniu.Aplikacja jest kontrolerem zasad urządzeń działającym w trybie właściciela urządzenia. Przykładowe przypadki użycia to w pełni zarządzane urządzenia firmowe oraz dedykowane urządzenia, takie jak tablice informacyjno-reklamowe i kioski.
Użytkownik przyznał aplikacji uprawnienie
SYSTEM_ALERT_WINDOW
.
Wymagana zgoda na uruchamianie działań z użyciem intencji oczekujących
Aby uniknąć przypadkowego uruchamiania aktywności na podstawie wymienionych warunków, od Androida 14 dostępne są interfejsy API, które umożliwiają włączanie lub wyłączanie uprawnień aplikacji do uruchamiania aktywności.
Aplikacje kierowane na Androida 15 lub nowszego nie będą już domyślnie przyznawać uprawnień do uruchamiania aktywności w tle (BAL) tworzonym przez nie PendingIntents
. Wymagane jest wyraźne zezwolenie. Oto dostępne opcje w zależności od tego, czy aplikacja wysyła czy tworzy PendingIntents
.
przez nadawcę oczekującej intencji;
Aplikacje kierowane na Androida 14 lub nowszego, które chcą uruchomić PendingIntent
, muszą:
- spełniać wymienione warunki i
- zezwolić na uruchamianie aktywności w tle na podstawie tych wyjątków.
Ta zgoda powinna być wymagana tylko, jeśli deweloper aplikacji wie, że aplikacja ma rozpocząć Aktywność.
Aby włączyć tę funkcję, aplikacja powinna przekazać pakiet ActivityOptions
z wartością setPendingIntentBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)
do metody PendingIntent.send()
lub podobnej.
Twórca oczekującej intencji
Aplikacje kierowane na Androida 15 lub nowszego, które tworzą PendingIntent
, muszą teraz wyraźnie zezwalać na uruchamianie aktywności w tle, jeśli chcą, aby te PendingIntents
mogły być uruchamiane zgodnie z wymienionymi warunkami.
W większości przypadków aplikacja uruchamiająca PendingIntent
powinna być aplikacją, w której użytkownik ma możliwość wyrażenia zgody.
Jeśli jednak aplikacja tworząca musi przyznać te uprawnienia:
PendingIntent
można uruchomić w dowolnym momencie, gdy tworzona aplikacja jest widoczna.- Jeśli aplikacja tworząca ma specjalne uprawnienia,
PendingIntent
może zostać uruchomiona w dowolnym momencie.
Aby to zrobić, aplikacja powinna przekazać pakiet ActivityOptions
z wartością setPendingIntentCreatorBackgroundActivityStartMode
(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)
do PendingIntent.getActivity()
lub za pomocą podobnych metod.
Aby dowiedzieć się więcej, zapoznaj się z odpowiednią dokumentacją:
ActivityOptions.setPendingIntentBackgroundActivityStartMode
ActivityOptions.setPendingIntentCreatorBackgroundActivityStartMode