poniedziałek, 17 lutego 2014

Intencje

Kod źródłowy do tej lekcji znajduje się tutaj. Rozpakuj go i zaimportuj. W katalogu z kodem źródłowym znajdą się podkatalogi oznaczone numerami. Są to po prostu kolejne wersje kodu, tworzonego w ramach przykładów. Możesz analizować kolejne kroki tworzenia aplikacji, lub od razu zabrać się za kod z katalogu o najwyższym numerku.

Intencja to zamiar wykonania jakiejś akcji, działanie np. wyślij SMS, wyświetl stronę www, zrób zdjęcie,wyświetl inny ekran. Intencje mogą być różnego typu. W zależności od potrzeb tworzymy intencję danego typu (do zrobienia zdjęcia, uruchomienia przeglądarki, wywołania jakiejkolwiek innej akcji) a następnie uruchamiamy ją. Przy okazji możemy przekazać jakieś parametry przez intencję. Np. z widoku listy wszystkich faktur uruchamiamy ekran z podglądem jednej wybranej. Musimy wtedy przekazać id faktury do wyswietlenia.
Pierwszy przykład to będzie zwykłe wyswietlenie innego ekranu aplikacji. Zaczynam od stworzenia zwykłego projektu na Androida. Następnie dodaję nową aktywność klikając PPM na pakiecie i wybierając New-->Other i z okna które się pojawi wybieram Android Activity:



Nadaję nazwy klasie tej aktywności oraz plikowi XML w którym będzie opisany Layout.


Po zatwierdzeniu w projekcie pojawiają mi się owe dwa pliki:


A w pliku manifestu nowy wpis:


Na ekranie aktywności głównej przyklejam jeden przycisk:


Przejdźmy teraz do kodu:




Linie 24-31 to podpięcie wywołania metody reakcja() pod naciśnięcie guzika. W samej metodzie reakcja jest napisane co się ma w takiej sytuacji zadziać. Jak widać tworzę nowy obiekt klasy Intent (linia 14) i w kolejnej linii uruchamiam intencje metodą startActivity (dziedziczoną po klasie Activity). Ponieważ intencją którą wywołuję jest inna aktywność, muszę przekazać jej kontekst, oraz wskazać klasę aktywności która ma zostać wywołana. Nie zapominamy oczywiście by po stworzeniu intencji ją wywołać :) Druga aktywność – ta którą wywołuję to zwykły najprostszy ekran z napisem „Hello World!”. Zobaczmy działanie aplikacji. Aplikacja tuż po uruchomieniu wczytuje moją główną aktywność:



Po kliknięciu powyższego przycisku mamy taki widok:


Została wywołana inna aktywność.

Rozbudujmy nieco naszą aplikację. Do wywołania innego ekranu dodam teraz przekazanie zmiennej. Wykorzystuję do tego metodę intencji putExtra. Musimy pamiętać by wywoływać ją przed startActivity(Intent i). W tym przypadku przekazuję tekst : „siema jestem zmienną!” pod postacią zmiennej o nazwie „zmienna”. Tekst ten zostanie przekazany do właśnie wywoływanej aktywności i wyświetlony na konsoli ( o wyswietlenie tego tekstu zadbam już na poziomie tej nowej aktywności):



Aby odebrać przekazany obiekt, tworzę po stronie wywoływanej aktywności obiekt klasy Bundle z którego pobieram zbiór przekazanych obiektów przy użyciu metody getExtras(). Z wiązki tej muszę teraz wybrać obiekt który mnie interesuje (linia 16). Odebrany tej tekst wyświetlam teraz na konsoli LogCata:



Efekt po uruchomieniu i kliknięciu przycisku:



Przyjrzyjmy się teraz innemu przykładowi aktywności. Tym razem będzie to wywołanie strony internetowej. Podaję do systemu intencję będącą żądaniem otwarcia strony internetowej:


 Platforma Android sprawdza jaki program odpowiada za obsługę takich intencji i przekazuje mu ją. Ponieważ chcemy nawiązać połączenie z internetem, musimy zadbać o dodanie stosownych uprawnień do pliku manifestu:


7 komentarzy:

  1. dlaczego po odpaleniu aplikacji wywala do pulpitu?

    OdpowiedzUsuń
  2. W funkcji:
    public void reakcja () ===> public void reakcja (View view)

    I trzeba zaimportować klasę View:
    import android.view.View;

    Bez tego nie pójdzie...

    OdpowiedzUsuń
  3. jak oprogramować przycisk, aby użytkownik mógł mi wysłać email albo formularz emailem bezpośrednio z aplikacji?

    OdpowiedzUsuń
  4. Jakby w takim razie wygladal kod dla np. 3 przyciskow na jednym ekranie?

    OdpowiedzUsuń
    Odpowiedzi
    1. Trochę późno odpowiadam ale ktoś jak będzie chciał odpowiedzi na to pytanie w przyszłości to na pewno skorzysta. Do oprogramowania akcji przycisków warto korzystać z atrybutu android:onClick w XML. Wożna to ustawić klikając prawym przyciskiem myszy na jakiś element layoutu i w properties znaleźć pole onClick i tam wpisać nazwę naszej metody. Następnie w pliku java deklarujemy metodę typu void o nazwie taką jak podaliśmy w pliku XML i z paramtrem typu View np: public void buttonListener(View w). W kodzie metody umieszczamy akcję dla przycisku.

      Usuń
  5. Bardzo fajnie napisane. Jestem pod wrażeniem i pozdrawiam.

    OdpowiedzUsuń
  6. Bardzo fajny wpis. Podoba mi się

    OdpowiedzUsuń