Android 10 (poziom interfejsu API 29) i wyższe ograniczenia nakładania ograniczeń na uruchamianie aplikacji działania, gdy aplikacja działa w tle. Te ograniczenia pozwalają zminimalizować przerwy w pracy Dzięki temu użytkownik ma większą kontrolę nad tym, co wyświetla się na ekranie.
Ten przewodnik przedstawia powiadomienia jako alternatywę dla rozpoczynania modułów w tle. Podaje też listę konkretnych przypadków, w których to ograniczenie nie występuje. zastosuj.
Zamiast tego wyświetlaj powiadomienia
Prawie we wszystkich przypadkach aplikacje działające w tle muszą wyświetlaj pilne powiadomienia, przekazywania użytkownikowi pilnych informacji zamiast bezpośredniego rozpoczynania działania; Takie powiadomienia obejmują obsługę przychodzącego połączenia telefonicznego lub aktywnego alarmu zegar.
Oparty na powiadomienia system alertów i przypomnień ma kilka zalet dla użytkowników:
- Podczas korzystania z urządzenia użytkownik zobaczy powiadomienie HUD, które umożliwia mu odpowiedzieć. Użytkownik zachowuje obecny kontekst i ma kontrolę nad treści, które widzą na ekranie.
- Powiadomienia pilne od czasu do czasu uwzględniają Reguły Nie przeszkadzać. Dla: Na przykład użytkownicy mogą zezwalać na połączenia tylko od określonych kontaktów dzwoniących, gdy włączony jest tryb Nie przeszkadzać.
- Gdy ekran urządzenia jest wyłączony, uruchamia się intencja pełnoekranowa natychmiast.
- Na ekranie Ustawienia urządzenia użytkownik może zobaczyć, które aplikacje ostatnio wysłane powiadomienia, w tym powiadomienia z konkretnych kanałów powiadomień. Na tym ekranie użytkownik może dostosować swoje ustawienia powiadomień.
Kiedy aplikacje mogą rozpoczynać aktywność
Aplikacje działające na Androidzie 10 lub nowszym mogą uruchamiać działania, gdy: jest spełniony co najmniej jeden z tych warunków:
- Aplikacja ma widoczne okno, np. aktywność na pierwszym planie.
- Aplikacja ma aktywność w: tylny stos funkcji i zadania na pierwszym planie.
W stosunku z tyłu istniejącego zadania w aplikacji jest aktywność Ekran Ostatnie.
W aplikacji występuje aktywność, która rozpoczęła się niedawno.
Aplikacja o nazwie
finish()
na urządzeniu niedawnych działań. Dzieje się tak tylko wtedy, gdy aplikacja miała działania na pierwszym planie lub w tylnej części stosu zadanie na pierwszym planie w momencie wywołania funkcjifinish()
.Aplikacja ma jedną z podanych niżej usług powiązanych z systemem. Te może wymagać uruchomienia interfejsu użytkownika.
AccessibilityService
AutofillService
CallRedirectionService
HostApduService
InCallService
TileService
(nie dotyczy Androida 14 (poziom interfejsu API 34) i nowszych wersji)VoiceInteractionService
VrListenerService
Aplikacja jest powiązana z inną, widoczną aplikacją. Aplikacja powiązane z usługą muszą pozostawać widoczne dla aplikacji w tle dla udało się rozpocząć działania.
Aplikacja otrzymuje powiadomienie
PendingIntent
z systemu. W w przypadku oczekujących intencji dla usług i odbiorników, może rozpoczynać działania przez kilka sekund po wysłaniu oczekującej intencji.Aplikacja otrzymuje żądanie
PendingIntent
wysłane z innego, widocznego .Aplikacja otrzymuje komunikat systemowy, w ramach którego aplikacja powinna uruchomić Interfejs. Przykłady:
ACTION_NEW_OUTGOING_CALL
iSECRET_CODE_ACTION
. Aplikacja może rozpoczynać działania przez kilka sekund po wysłaniu transmisji.Aplikacja jest powiązana ze sprzętem towarzyszącym za pomocą
CompanionDeviceManager
API. Ten interfejs API umożliwia aplikacji uruchamianie działań w odpowiedzi na działania podczas słuchania muzyki na sparowanym urządzeniu.Ta aplikacja jest kontrolerem zasad dotyczących urządzeń działającym w trybie właściciela urządzenia. Przykładowe zastosowania to w pełni zarządzane urządzenia firmowe oraz urządzeń specjalnych, takich jak cyfrowe tablice informacyjne i kioski.
Aplikacja otrzymała uprawnienie
SYSTEM_ALERT_WINDOW
przez użytkownika.
Wymagana jest akceptacja w przypadku uruchamiania działań z intencji PendingIntents
Aby zapobiec zezwalaniu na przypadkową aktywność, która rozpoczyna się na podstawie listy , począwszy od Androida 14, dostępne są jawne interfejsy API, które umożliwiają , aby włączyć lub wyłączyć przyznawanie aplikacji uprawnień do aktywności.
Aplikacje kierowane na Androida 15 lub nowszego będą domyślnie wyłączone
przyznają PendingIntents
uprawnienia do uruchamiania aktywności w tle (BAL)
tworzyć. Wymagana jest wyraźna zgoda użytkownika. Oto opcje
w zależności od tego, czy aplikacja wysyła, czy tworzy PendingIntents
.
Przez nadawcę intencji PendingIntent
Aplikacje kierowane na Androida 14 lub nowszego, które chcą uruchomić PendingIntent
, muszą
- spełniają podane warunki oraz
- zezwolić na uruchamianie aktywności w tle z uwzględnieniem tych wyjątków
Zgodę na to należy tylko wtedy, gdy deweloper wie, że aplikacja jest rozpocznie aktywność.
Aby można było wyrazić zgodę, aplikacja powinna przekazać pakiet ActivityOptions
z
setPendingIntentBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)
do metody PendingIntent.send()
lub podobnej.
Przez twórcę intencji PendingIntent
Aplikacje kierowane na Androida 15 lub nowszego, które tworzą PendingIntent
, muszą teraz
wyraźnie wyrazić zgodę na uruchamianie aktywności w tle, jeśli chcą.
PendingIntents
, aby można było uruchomić grę zgodnie z wymienionymi warunkami.
W większości przypadków aplikacja uruchamiająca PendingIntent
powinna wyrazić zgodę.
Jeśli jednak aplikacja, która tworzy aplikację, musi przyznać te uprawnienia:
PendingIntent
możesz uruchomić w każdej chwili, gdy widzisz, że tworzysz aplikację.PendingIntent
możesz uruchomić w dowolnym momencie, jeśli w aplikacji jest specjalny uprawnień.
Aby można było wyrazić zgodę, aplikacja powinna przekazać pakiet ActivityOptions
z
setPendingIntentCreatorBackgroundActivityStartMode
(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)
na
PendingIntent.getActivity()
lub podobnej.
Więcej informacji znajdziesz w odpowiedniej dokumentacji:
ActivityOptions.setPendingIntentBackgroundActivityStartMode
ActivityOptions.setPendingIntentCreatorBackgroundActivityStartMode