Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android

Android od podstaw: łączenie aktywności i aplikacji

Difficulty:BeginnerLength:MediumLanguages:
This post is part of a series called Android From Scratch.
Android From Scratch: Activities and Fragments
Android From Scratch: Understanding Adapters and Adapter Views

Polish (Polski) translation by Mateusz Kurlit (you can also view the original English article)

Aplikacja na Androida składająca się z kilku prostych aktywności zazwyczaj oferuje znacznie więcej użytkownikowi niż ta, która koncentruje całą funkcjonalność w dużej i złożonej aktywności. Dobrą zasadą jest ograniczenie każdej stworzonej aktywności do jednego widocznego zadania.

Aby stworzyć warunki do funkcjonowania prostych aktywności, musisz utworzyć połączenia i umożliwić płynną wymianę danych między nimi. W tym poradniku pokażę ci jak wykorzystać intencje do tworzenia połączeń między aktywnościami i wysyłać dane z jednej aktywności do drugiej.

1. Co to jest intencja?

W prawdziwym świecie, przed przeprowadzeniem działania zazwyczaj masz zamiar go przeprowadzić. To samo zjawisko występuje w świecie aplikacji na Androida. Aby rozpocząć aktywność Androida, musisz mieć dla niej intencje.

Intencje są wystąpieniami klasy Intent. Są tak integralną częścią platformy Android, że nawet najprostsze aplikacje ich potrzebują. Rozważmy przykład aplikacji Hello World stworzonej wcześniej w tej serii. Aplikacja może się uruchomić po dotknięciu ikony tylko dlatego, że potrafi odpowiedzieć na intencję utworzoną przez program uruchamiający na twoim urządzeniu.

Oprócz szczegółów aktywności, intencja może zawierać dodatkowe dane, trafnie nazwane dodatkami, mającymi za zadanie wysyłanie argumentów lub zwracaniu wyników między jedną i drugą aktywnością.

2. Typy intencji

Intencja może być jednoznaczna lub domniemana. Intencja jest jednoznaczna, kiedy inicjujesz ją za pomocą literalnej klasy aktywności, którą chcesz uruchomić. W przypadku domniemanych intencji, określasz tylko działanie, które chcesz przeprowadzić i pozwalasz systemowi operacyjnemu Android określić dokładną aktywność, która powinna być uruchomiona.

Zazwyczaj jednoznaczne intencje są wykorzystywane do uruchomiania aktywności należących do twojej aplikacji, a intencje domniemane są przeznaczone dla aktywności, które należą do innych aplikacji zainstalowanych na urządzeniu użytkownika.

3. Tworzenie jednoznacznej intencji

Aby utworzyć jednoznaczną intencję, możesz użyć metody setClass() obiektu Intent i przekazać do niej literalną klasę aktywności wraz z odniesieniem do bieżącej aktywności jako kontekstu. Na przykład, jeśli bieżąca aktywność to MainActivity, a ty chcesz utworzyć intencję, która uruchamia aktywność o nazwie OtherActivity, wykorzystaj poniższy kod:

Jeśli chcesz utworzyć domniemaną intencję dla aktywności, która nie należy do twojej aplikacji, użyj w zamian metody setComponent(). Jako argument, musisz przekazać obiekt ComponentName, który został zainicjowany za pomocą nazwy pakietu odpowiedniej aplikacji i nazwy klasy aktywności.

Na przykład, oto jak utworzyć intencję dla aktywności o nazwie OtherActivity, która należy do aplikacji, której nazwa pakietu to com.example.otherapp.

4. Tworzenie intencji domniemanej

Aby utworzyć domniemaną intencję, musisz użyć metody setAction() obiektu Intent i przekazać jej obiekt ciągu. Obiekt ciągu określa nazwę działania, które zamierzasz przeprowadzić. Android SDK posiada kilka standardowych działań. W większości z nich musisz skorzystać z metody setData(), aby określić dane, z którymi działanie ma współpracować. Dane muszą zawsze posiadać formę obiektu Uri.

Jedną z najczęściej wykorzystywanych działań jest ACTION_VIEW, która umożliwia uruchamianie różnych aplikacji takich jak domyślna przeglądarka, dzwonienie i kontakty. Na przykład, oto jak stworzyć domniemaną intencję, aby zadzwonić pod numer 123456789:

Poprzez zmianę obiektu Uri, który przekazujesz metodzie setData(), możesz otworzyć inną aplikację ACTION_VIEW. Na przykład, jeśli chcesz uruchomić przeglądarkę i otworzyć stronę internetową https://tutsplus.com/, wezwanie setData() będzie wyglądało tak:

5. Dodatki w intencji

Niektóre intencje muszą zawierać dodatkowe dane, aby działały właściwie. Dodatkowe dane nazywają się dodatkami. Dodatki to nic innego jak para klucz-wartość, która należy do obiektu Bundle. Korzystanie z Bundle jest jak używanie HashMap z dwoma ograniczeniami:

  • klucz musi zawsze być obiektem String
  • wartości muszą zawsze być prymitywami lub obiektami Parcelable

Dodatki mogą być używane z jednoznacznymi i domniemanymi intencjami. Aby włączyć dodatki do obiektu Intent, możesz użyć metody putExtra(). Na przykład, oto jak możesz włączyć dodatki z kluczem message i wartością Hello.

6. Korzystanie z intencji

Teraz, gdy rozumiesz jak tworzyć intencję i dodawać do niej dane, przejdźmy do wykorzystywania obiektów Intent do uruchamiania aktywności. Najprostszym sposobem na uruchomienie aktywności za pomocą obiektu Intent jest przekazanie jej jako argument metodzie startActivity().

Metoda startActivity() jest ogólnie używana tylko, kiedy chcesz przełączyć z jednej aktywności do drugiej. Inaczej mówiąc, startActivity() umożliwia przeniesienie użytkownika z jednego ekranu aplikacji na drugi.

Jeśli chcesz uruchomić aktywność, aby wykonać konkretne zadanie i otrzymać jego wyniki, musisz użyć w zamian metody startActivityForResult(). Ta metoda, oprócz obiektu Intent, oczekuje liczby całkowitej, której używasz do zidentyfikowania wyniku aktywności. Liczba całkowita jest określana jako kod żądania.

Dodatkowo, aby otrzymać wynik aktywności uruchomionej za pomocą metody startActivityForResult(), twoja aktywność musi nadpisać metodę onActivityResult(). Na przykład, poniższy fragment kodu pokazuje jak utworzyć domniemaną intencję, aby zrobić zdjęcie za pomocą domyślnej aplikacji aparatu i otrzymać miniaturę zdjęcia jako wynik:

Zwróć uwagę, że wynik aktywności jest również obiektem Intent. W powyższym fragmencie kodu, najpierw użyłem metody getExtras(), aby wydobyć Bundle zawierający dodatki należące do wyniku. Następnie skorzystałem z metody get(), aby wydobyć miniaturę jako obiekt Bitmap.

7. Korzystanie z filtrów intencji

W poprzedniej części, dowiedziałeś się jak używać domniemanych intencji, aby uruchamiać aktywności, które należą do innych aplikacji zainstalowanych na urządzeniu użytkownika. Być może zastanawiasz się, czy inne aplikacje mogą uruchamiać aktywności, które należą do twojej aplikacji, za pomocą tej samej procedury. Odpowiedź na to pytanie brzmi "nie, chyba, że tego chcesz". Domyślnie, ze względów bezpieczeństwa, aktywność nie może być uruchomiona przez aktywności należące do innych aplikacji.

Aby udostępnić aktywność innym aplikacjom, musisz utworzyć dla niej filtr intencji. Aby to zrobić, musisz dodać tag intent-filter do pliku projektu AndroidManifest.xml.

Na przykład, jeśli chcesz, żeby aktywność o nazwie MyCustomActivity odpowiadała niestandardowemu działaniu o nazwie com.custom.action, jej wpis w manifeście musi wyglądać w ten sposób:

Zwróć uwagę, że razem z tagiem action określającym nazwę działania, tag intent-filter musi również zawierać tag category, którego atrybut name to android.intent.category.DEFAULT. Bez tagu category, twoja aktywność nie będzie w stanie odpowiedzieć na domniemane intencje.

Po stworzeniu filtra intencji, każda aplikacja może uruchomić MyCustomActivity za pomocą kod poniżej:

Jeśli nie chcesz korzystać z filtrów intencji, ale nadal chcesz udostępniać aktywność innym aplikacjom, możesz dodać atrybut exported do definicji aktywności w manifeście, ustawiają jego wartość na true.

W tym przypadku, inne aplikacje będą musiały skorzystać z jednoznacznych intencji, aby uruchomić aktywność.

Podsumowanie

Teraz wiesz jak łączyć dowolne dwie aktywności obecne na urządzeniu za pomocą domniemanych i jednoznacznych intencji. Dzięki tej wiedzy, możesz zacząć tworzyć złożone aplikacji, które posiadają kilka ekranów. Możesz również łatwo wykorzystać funkcjonalność innych aplikacji zainstalowanych na urządzeniu.

Aby dowiedzieć się więcej o intencjach, przejrzyj oficjalną dokumentację.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.