Archiwa miesięczne: Marzec 2016

Trochę o intencjach

W poprzednim poście pisałam o mojej pierwszej (jak przychylnie policzyć to nawet drugiej) aplikacji, która jest poprostu implementacją kodu z tutorialadevelopers.android.com. O tym, że składa się z dwóch klocków (komponentów) – aktywności. Pierwsza aktywność odpowiada za pojawienie się okienka z polem tekstowym i przyciskiem wyślij, a druga za pojawianie się ekranu z tekstem wiadomości.

Dziś, z racji na liczbę zjedzonych kawałków mazurka, krótki  tekst o tym jak pierwsza aktywność wywołuje drugą, czyli o klasie Intent. Obiekty z tej klasy będę nazywać intencjami, głównie dlatego że znalazłam książkę wydawnictwa O’Reilly z takim tłumaczeniem. Trochę też zaniepokoiła mnie pierwsza definicja w słowniku Merriam-Webster. Ufnie zakładam, że twórcom klasy chodziło o drugie znaczenie tego słowa. Czym są te intencje?

The unit of communication is intent class.

Programming Android, Second Edition by Z. Medniekes, L.Dornin, G. B. Meike & M.Nakamura copyright 2012 O’Reilly media, Inc.,978-1-449-316664-8

Obiekty z tej klasy reprezentują operacje, których jedna aktywność wymaga od kolejnej.

Intents form the basis of a system of loose coupling that allows activities to launch on another, and provide results. When an application dispatches an intent, it’s possible that several different activities might be registered to provide the desired operation.

Programming Android, Second Edition by Z. Medniekes, L.Dornin, G. B. Meike & M.Nakamura copyright 2012 O’Reilly media, Inc.,978-1-449-316664-8

W przypadku aplikacji z tutoriala sytuacja szczęśliwie jest prostsza. W klasie Moja Aktywność (czytelnikom, którzy nie czytali poprzedniego posta i zadają teraz pytanie jaka znów twoja aktywność? napiszę, że to ta pierwsza, która odpowiada za pojawienie się pierwszego widoku) jest zawarta metoda wyślij wiadomość. Jest ona wywoływana po wciśnięciu guzika wyślij. Wewnątrz niej jest zaincjowany obiekt intencja. Konstruktor pobiera tu dwa argumenty: kontekst aplikacji oraz klasę będącą komponentem, do którego system ma przekazać intencję (w tym przypadku jest to aktywność Pokaż wiadomość).

 

public void sendMessage(View view){
    Intent intent = new Intent(this, DisplayMessageActivity.class);
    EditText editText = (EditText) findViewById(R.id.edit_message);
    String message = editText.getText().toString();
    intent.putExtra(EXTRA_MESSAGE, message);
    startActivity(intent);
}

Metoda putExtra() umożliwia przekazanie danych do intencji (w tym przypadku tekstu wpisanej wiadmości :)).

A jak ten przekaz wygląda po stronie klasy Pokaż wiadomość? Metoda getIntent() zwraca intencję, która rozpoczęła daną aktywność, a metoda getStringExtra() pobiera tekst wpisanej wcześniej wiadomości.

Intent intent = getIntent();
String message = intent.getStringExtra(MojaAktywnosc.EXTRA_MESSAGE);

Trochę o aktywnościach

Skończyłam Moją Pierwszą Aplikację z wspominanego ostatnio tutoriala  na stronie developers.android.com.  Aplikacja jest prosta: po jej uruchomieniu pojawia się okienko z polem tekstowym, w które można wpisać wiadomość, oraz przyciskiem wyślij, po którego wciśnięciu wiadomość pojawi się na ekranie.

Pierwszy mały sukces, o którym opowiadałam Mojej Przyjaciółce Programistce C#. Nie kończyłam Informatyki, nie czuję się pewnie opowiadając o technikaliach. Przynajmniej na razie… Niemniej jednak chcę brzmieć profesjalnie, więc niby niedbale opowiadam o zakończonych szęśliwie zmaganiach: „Miałam aplikację z jedną aktywnością i musiałam dodać drugą”. Z niejednego pieca chleb jadłam,  nie jedną aktywność w życiu programowałam. „Bardzo w tym Androidzie trzeba być aktywnym” – zażartowała Moja Przyjaciółka Programistka C# – „to co to w zasadzie są te aktywności?”

Android apps are built as a combination of distinct components that can be invoked individually.

http://developer.android.com/guide/index.html

Aplikację z tutoriala „budowałam” tylko z jednego rodzaju komponentów – własnie aktywności.

An Activity is an application component that provides a screen with which users can interact in order to do something, such as dial the phone, take a photo, send an email, or view a map.

http://developer.android.com/guide/components/activities.html

An activity is a unit of interactive user interface in an Android application, usually corresponding to a group of user interface objects occupying the entire screen.

Programming Android, Second Edition by Z. Medniekes, L.Dornin, G. B. Meike & M.Nakamura copyright 2012 O’Reilly media, Inc.,978-1-449-316664-8

Ja na razie o aktywnyściach myślę po prostu jak o takich  interaktywnych okienkach, które są kolejno wywoływane podczas działania aplikacji. Co jest istotne to to, że te aktywności są ze sobą rozłączne i są od siebie niezależne. Różne aplikacje mogą uruchamiać te same aktywności. A camera app can start the activity in the email app that composes new mail, in order for the user to share a picture (http://developer.android.com/guide/components/fundamentals.html).

Zgodnie z tym, co mówiłam Mojej Przyjaciółce Programistce C#, aplikacja z tutoriala składa się z dwóch aktywności. Pierwsza, którą posłusznie nazwałam Moja Aktywnosc, odpowiada za pojawienie się okienka z polem tekstowym  i przyciskiem wyślij. Druga aktywność Pokaż Wiadomość jest wywoływana po wciśnięciu przycisku wyślij (i odpowiada za pokazanie się tekstu wiadomości, but you got it;))

Aktywności są zaimplementowane jako podklasy klasy Activity  (AppCompatActivity jest podklasą klasy Activity):

public class MojaAktywnosc extends AppCompatActivity 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_moja_aktywnosc);

Metoda onCreate(Bundle) inicjuje aktywność, powodując m.in. utworzenie hierarchii widoków opisanych w pliku activity_moja_aktywnosc.xml. Ale o tym, o cyklu życia aktywności oraz o tym, jak dana aktywność wywołuje kolejną, w kolejnych postach.

Pierwsza aktywność

Porównywanie osiągania różnorakich celów do zdobowynia górskich szczytów pewnie nie należy do najbardziej oryginalnych. Nic na to jednak nie poradzę, że pasuje jak ulał do mojego ostatniego tygodnia. Z resztą, jakich szczytów?

Lubię górskie wędrówki. Miłe weekendy i urlopy w Tatrach, Beskidach, Bieszczadach. Głównie latem, po szlakach, czasem stanę w kolejce na Orlą Perć (to jest ta moja odrobina adrenaliny w życiu). Jeszcze w Warszawie gotuję się do wyjazdu. Stawiam na profesjonalizm, więc pakuję mapę z dobrą skalą, stuptuty, termiczną bieliznę, windstoper, kompas. Po przyjeździe na miejsce zaczynam pierwsze podejście i… mam ochotę zabierać się z powrotem. Niby nie jestem jeszcze zmęczona, niby jest jeszcze płasko, ale sama świadomość, że przede mną parę (nie wiem nawet dokładnie ile) godzin podejścia, męczy mnie tak, że mam ochotę zawrócić. Zwłaszcza, że przecież jest jeszcze płasko, nudno i nic nie widać.

To samo czułam w tym tygodniu. Przez pierwsze dni w podekscytowaniu zastanawiałam się, którego środowiska używać? Android Studio czy Eclipse? Niczym wytrawny programista Androida albo przynajmniej Javy, czytałam wypowiedzi na Quora i Stack Over Flow. Wreszcie zdecydowałam się na Android Studio, w zasadzie tylko dlatego, że jest oficjalnym IDE od Google’a.

Skoro korzystam z Android Studio, to zaczęłam od tutoriala z jego strony. Dla mnie tutoriale są bardzo pomocne.  Niestety bardzo często, jak z nich korzystam, łapie się na tym, że momentami najzwyczajniej w świecie przepisuję ich zawartość. Jeszcze nie wiem, co w zasadzie robię, jeszcze nie jestem w stanie się na tym skupić. Robię głupie błędy, a ich komunikaty niewiele mi mówią.

SC20160320-194842

Nie będę przepisywać tu tutoriala, który naprawdę jest dla mnie jak znalazł na początek. Na razie udało mi się stworzyć projekt, a w nim pierwszą aktywność oraz stworzyć bardzo prosty interfejs użytkownika (z jednym polem tekstowym i jednym przyciskiem). Po prawej screenshot Mojej Pierwszej Aplikacji z mojego telefonu z literówką w nazwie.

 

 

Z pewną dozą nieśmiałości…

…zaczynam projekt Jedna apka tygodniowo. Co tydzień będę pisać jedną aplikację na Androida. No ok, nie sądzę, żeby znalazł się jakiś chętny na pierwsze aplikacje, które będę tu opisywać, ale ja już nie mogę się doczekać, aż zainstaluję je u siebie. A z czasem kto wie, może pojawią się tu jakieś hity.

Co wiem o aplikacjach na Androida? Praktycznie nic. Jeśli chodzi o Javę, w której będę pisać, to umiem coś tam, coś tam.

To jak zamierzam pisać jedną aplikację tygodniowo? Nie od razu Rzym zbudowano – zacznę od naprawdę prostych aplikacji i z czasem przejdę do bardziej skomplikowanych. Dodanie nowej funkcjonalności, to będzie nowa aplikacja.

Stay tuned