Jestem nowicjuszem w systemie Android. Przeczytałem Dokumentację Androida, ale wciąż potrzebuję więcej wyjaśnień. Czy ktoś może mi powiedzieć, co to dokładnie PendingIntent
jest?
537
Jestem nowicjuszem w systemie Android. Przeczytałem Dokumentację Androida, ale wciąż potrzebuję więcej wyjaśnień. Czy ktoś może mi powiedzieć, co to dokładnie PendingIntent
jest?
PendingIntent
To znak, że dajesz do aplikacji obcej (np NotificationManager
, AlarmManager
, Home Screen AppWidgetManager
, lub innych aplikacji 3rd party), co pozwala na stosowanie obcego uprawnienia do korzystania z danej aplikacji, aby wykonać predefiniowany kawałek kodu .
Jeśli dasz zagranicznej aplikacji zamiar, wykona ona ciebie Intent
z własnymi uprawnieniami. Ale jeśli dasz zagraniczną aplikację PendingIntent
, ta aplikacja wykona twoje Intent
użycie za jej zgodą.
Oczekiwanie na zamiar to token, który dajesz jakiejś aplikacji w celu wykonania akcji w imieniu aplikacji, niezależnie od tego, czy proces aplikacji trwa, czy nie.
Myślę, że dokumentacja jest wystarczająco szczegółowa: Dokumenty Pending Intent .
Wystarczy pomyśleć o przypadkach użycia dla Oczekujących Intencji, takich jak (Nadawanie Intencji, planowanie alarmów), a dokumentacja stanie się bardziej zrozumiała i zrozumiała.
źródło
W moim przypadku żadna z powyższych odpowiedzi ani oficjalna dokumentacja Google nie pomogły mi uchwycić pojęcia
PendingIntent
klasy.A potem znalazłem ten film, Google I / O 2013, sesja Beyond the Blue Dot . W tym filmie ex-googler Jaikumar Ganesh wyjaśnia, co
PendingIntent
jest, i właśnie to dało mi duży obraz tego.Poniżej znajduje się tylko transkrypcja powyższego wideo ( z 15:24 ).
To wyjaśnienie staje się bardziej zrozumiałe dzięki temu fragmentowi kodu (który znajduje się na slajdzie sesji).
źródło
Dlaczego PendingIntent jest wymagany? Myślałem jak
Intent
lubIntent
do tego samego celu.Na przykład
Intent bluetoothIntent= new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
Jeśli wyślę
bluetoothIntent
do innej aplikacji, która nie ma uprawnieńandroid.permission.BLUETOOTH_ADMIN
, ta aplikacja odbierająca nie może włączyć Bluetooth za pomocąstartActivity(bluetoothIntent)
.Ograniczenie to można pokonać za pomocą
PendingIntent
. DziękiPendingIntent
aplikacji odbierającej nie trzebaandroid.permission.BLUETOOTH_ADMIN
włączać Bluetooth. Źródło .źródło
Oczekiwanie na zamiar to zamiar, który rozpocznie się w pewnym momencie w przyszłości. Normalne zamiary zaczynają się natychmiast po przekazaniu do
startActivity(Intent)
lubStartService(Intent)
.źródło
Przyszła intencja, z której mogą korzystać inne aplikacje.
A oto przykład tworzenia takiego:
źródło
ANALOGIA PODATKOWA
Zamiar
Zamiary są zwykle używane do uruchamiania Usług. Na przykład:
To tak, jakbyś wezwał taksówkę:
Oczekuje na zamiar
Musisz użyć czegoś takiego:
Teraz ta strona trzecia uruchomi usługę działającą w Twoim imieniu. Prawdziwą analogią jest Uber lub Lyft, którzy są firmami taksówkowymi.
Wysyłasz zapytanie o przejazd do Uber / Lyft. Następnie zaczną dzwonić do jednego ze swoich kierowców w Twoim imieniu.
W związku z tym:
źródło
PendingIntent to token, który przekazujesz innej aplikacji (np. Menedżerowi powiadomień, Menedżerowi alarmów lub innym aplikacjom zewnętrznym), który pozwala tej aplikacji na korzystanie z uprawnień aplikacji do wykonania predefiniowanego fragmentu kodu. Aby wykonać transmisję za pośrednictwem oczekującej intencji, uzyskaj PendingIntent za pośrednictwem PendingIntent.getBroadcast (). Aby wykonać działanie za pośrednictwem oczekującego zamiaru, otrzymasz działanie za pośrednictwem PendingIntent.getActivity ().
źródło
Co to jest zamiar?
Intent to specyficzne polecenie w systemie Android, które pozwala wysłać polecenie do systemu operacyjnego Android, aby zrobić coś konkretnego. Pomyśl o tym jak o akcji, która musi się odbyć. Istnieje wiele działań, które można wykonać, takich jak wysłanie wiadomości e-mail, dołączenie zdjęcia do wiadomości e-mail lub nawet uruchomienie aplikacji. Logiczny proces tworzenia zamiaru jest zwykle następujący: Utwórz zamiar b. Dodaj opcje zamiaru -> np. jaki rodzaj zamiaru wysyłamy do systemu operacyjnego lub wszelkie atrybuty powiązane z tym zamiarem, takie jak ciąg tekstowy lub coś przekazywanego wraz z zamiarem c. URUCHOM CEL
Przykład z życia: Powiedzmy, że budzę się rano i „zamierzam” iść do toalety. Najpierw będę musiał MYŚLIĆ o pójściu do toalety, ale to tak naprawdę NIE doprowadzi mnie do toalety. Będę musiał powiedzieć mózgowi, aby najpierw wstał z łóżka, a następnie poszedł do toalety, a następnie zwolnił, a następnie poszedł i umył ręce, a następnie poszedł i wytarł ręce. Kiedy już wiem, dokąd zmierzam, WYSYŁAM polecenie, aby rozpocząć, a moje ciało podejmuje działania.
Co to jest oczekiwanie?
Kontynuując przykład z życia, powiedzmy, że chcę wziąć prysznic, ale chcę wziąć prysznic PO Myciu zębów i jem śniadanie. Więc wiem, że nie będę brać prysznica przez co najmniej 30-40 minut. Wciąż mam w głowie, że muszę przygotować ubranie, a potem wejść po schodach do łazienki, rozebrać się i wziąć prysznic. Stanie się to jednak dopiero po upływie 30–40 minut. Teraz mam zamiar wziąć prysznic. OCZEKUJE na 30-40 minut.
Jest to właściwie różnica między zamierzonym i regularnym zamiarem. Regularne zamiary mogą być tworzone bez założeń oczekujących, jednak aby utworzyć oczekujące zamiary, musisz najpierw skonfigurować regularne zamiary.
źródło
PendingIntent
jest w zasadzie przedmiotem, który otacza innyIntent
obiekt. Następnie może zostać przekazany do aplikacji zagranicznej, w której przyznajesz tej aplikacji prawo do wykonania operacji, tj. Wykonania zamiaru, tak jakby był wykonany z procesu własnej aplikacji (to samo uprawnienie i tożsamość). Ze względów bezpieczeństwa zawsze powinieneś przekazywać wyraźne zamiary do PendingIntent, a nie być niejawnym.źródło
W prostym języku:
1. Opis działania zamiaru i celu do wykonania. Najpierw musisz utworzyć zamiar, a następnie przekazać określoną klasę Java, którą chcesz wykonać, do zamiaru.
2. Możesz wywołać te klasy java, które są twoją klasą akcji klas, przez PendingIntent.getActivity, PendingIntent.getActivities (Context, int, Intent [], int), PendingIntent.getBroadcast (Context, int, Intent, int) i PendingIntent. getService (Context, int, Intent, int); Tutaj widzisz ten zamiar, który pochodzi z kroku 1
3. Należy pamiętać, że ... Dając PendingIntent innej aplikacji, przyznajesz jej prawo do wykonania określonej operacji.
Tego nauczyłem się po długim czytaniu.
źródło
PendingIntent otacza ogólną intencję tokenem, który dajesz zagranicznej aplikacji do wykonania za Twoją zgodą. Na przykład:
źródło
Jak sama nazwa wskazuje .. PendingIntent
możesz go zawiesić (zrób to po pewnym czasie). Działa w inny sposób. Jest to sposób na przekazanie zadania innej aplikacji do wykonania w Twoim imieniu.
źródło
Oczekujące Intent Określa działania należy podjąć w przyszłości. Pozwala przekazać przyszłą intencję do innej aplikacji i pozwolić tej aplikacji na wykonanie tej intencji, tak jakby miała takie same uprawnienia jak twoja aplikacja, niezależnie od tego, czy twoja aplikacja jest nadal aktywna po jej wywołaniu.
Jest to token, który przekazujesz zagranicznej aplikacji, która pozwala zagranicznej aplikacji na wykorzystanie uprawnień aplikacji do wykonania predefiniowanego fragmentu kodu.
Jeśli dasz zagranicznej aplikacji zamiar, a ta aplikacja wyśle / wyemituje zamiar, który podałeś, wykona zamiar z własnymi uprawnieniami. Ale jeśli zamiast tego przekażesz zagranicznej aplikacji OCZEKIWANIE utworzone przez Ciebie za pomocą własnego pozwolenia, ta aplikacja wykona zawarty Intent za pomocą pozwolenia Twojej aplikacji.
Aby wykonać transmisję za pośrednictwem oczekującej intencji, uzyskaj PendingIntent za pośrednictwem PendingIntent.getBroadcast (). Aby wykonać działanie za pośrednictwem oczekującego zamiaru, otrzymasz działanie za pośrednictwem PendingIntent.getActivity ().
Jest to czynność zamierzona, którą chcesz wykonać, ale w późniejszym czasie. Pomyśl o tym, jak postawić na lodzie. Powodem jest to, że Intent musi zostać utworzony i uruchomiony z prawidłowego kontekstu w aplikacji, ale istnieją pewne przypadki, w których nie jest on dostępny w momencie, gdy chcesz uruchomić działanie, ponieważ technicznie jesteś poza kontekstem aplikacji ( dwa typowe przykłady to uruchamianie działania z poziomu powiadomienia lub nadawcy.
Tworząc obiekt PendingIntent, którego chcesz użyć do uruchomienia, powiedzmy, działania, gdy masz do tego kontekst (z innego działania lub usługi), możesz przekazać ten obiekt do czegoś zewnętrznego, aby mógł uruchomić część aplikacji w Twoim imieniu.
PendingIntent zapewnia środki do działania aplikacji, nawet po zakończeniu procesu. Należy zauważyć, że nawet po tym, jak aplikacja, która utworzyła PendingIntent, została zabita, Intent może nadal działać. Opis zamierzonej i docelowej akcji do wykonania z nim. Instancje tej klasy są tworzone za pomocą getActivity (Context, int, Intent, int), getBroadcast (Context, int, Intent, int), getService (Context, int, Intent, int); zwrócony obiekt może zostać przekazany innym aplikacjom, aby mogły później wykonać akcję opisaną w Twoim imieniu.
Nadając PendingIntent innej aplikacji, przyznajesz jej prawo do wykonania określonej operacji, tak jakby inna aplikacja była sobą (z tymi samymi uprawnieniami i tożsamością). Dlatego powinieneś uważać na to, jak zbudujesz PendingIntent: często, na przykład, podstawowa intencja, którą podajesz, będzie miała nazwę komponentu jawnie ustawioną na jeden z twoich własnych komponentów, aby upewnić się, że ostatecznie zostanie wysłana tam i nigdzie indziej.
Sam PendingIntent to po prostu odwołanie do tokena obsługiwanego przez system opisujący oryginalne dane użyte do jego odzyskania. Oznacza to, że nawet jeśli proces aplikacji będący jej właścicielem zostanie zabity, sam PendingIntent pozostanie użyteczny dla innych procesów, które zostały mu przekazane. Jeśli aplikacja tworząca później ponownie pobierze ten sam rodzaj PendingIntent (ta sama operacja, ta sama akcja Intent, dane, kategorie i komponenty oraz te same flagi), otrzyma PendingIntent reprezentujący ten sam token, jeśli jest nadal ważny i może dlatego wywołaj anuluj (), aby go usunąć.
źródło
Pending Intent to intencja, która zapewnia wszelkie uprawnienia innej aplikacji do wykonania określonych prac. Po zniszczeniu głównej aktywności system operacyjny Android odbiera od niej pozwolenie.
źródło