Mariusz Fraś. Instytut Informatyki. olitechnika Wrocławska. Systemy Wbudowane. Android. Dr inż. Mariusz Fraś. maf 1



Podobne dokumenty
akademia androida Pierwsze kroki w Androidzie część I

Programowanie aplikacji dla technologii mobilnych. mgr inż. Anton Smoliński

Systemy operacyjne na platformach mobilnych

Laboratorium Systemów Mobilnych. Wykład 1

Systemy operacyjne na platformach mobilnych

Android, wprowadzenie do SDK

Programowanie urządzeń mobilnych. dr inż. Juliusz Mikoda

Życie aktywności Nawigując przez aplikacje poszczególne Aktywności przechodzą pomiędzy stanami. Dla przykładu gdy aktywność uruchamia się po raz

Programowanie Urządzeń Mobilnych. Część II: Android. Wykład 2

Programowanie Urządzeń Mobilnych. Laboratorium nr 7, 8

[Android] Podstawy programowania

Aktywności są związane z ekranem i definiują jego wygląd. Dzieje się to poprzez podpięcie do aktywności odpowiedniego widoku.

Obsługa SMS i telefonii

Systemy operacyjne na platformach mobilnych

Android - wprowadzenie. Łukasz Przywarty

SOP System Obsługi Parkingów

Systemy operacyjne na platformach mobilnych 3 Wstęp do systemu Android

Programowanie urządzeń mobilnych w systemie Android. Ćwiczenie 7 Wykorzystanie układu LinearLayout

AndroidManifest.xml. Plik manifestu opisuje podstawowe charakterystyki aplikacji i definiuje jej komponenty.

Mobilne aplikacje multimedialne

Systemy operacyjne na platformach mobilnych

Podstawowe elementy GUI - zadania

Wsparcie dla różnych urządzeń. SDK pozwala przystosować aplikację do większości tych wypadków

Czym jest Android Architektura systemu Cechy platformy Android

Programowanie urządzeń mobilnych w systemie Android

Technologie internetowe w programowaniu.

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

Programowanie dla Androida. Ubiquitous

Wprowadzenie do systemu Android

akademia androida Service, BroadcastReceiver, ContentProvider część IV

Android. Podstawy tworzenia aplikacji. Piotr Fulma«ski. March 4, 2015

Java jako język programowania

dr Artur Bartoszewski dr Artur Bartoszewski - Aplikacje mobilne - Wykład

Programowanie obiektowe zastosowanie języka Java SE

Programowanie urządzeń mobilnych w systemie Android. Ćwiczenie 8 Wykorzystanie układu RelativeLayout

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Powiadomienia w systemie Android

Laboratorium Systemów Mobilnych. Wykład 2

Systemy operacyjne na platformach mobilnych

Programowanie aplikacji mobilnych

Ciekawym rozwiązaniem służącym do obsługi zdarzeń dla kilku przycisków w ramach jednej aktywności może być następujący kod:

Projektowanie, tworzenie aplikacji mobilnych na platformie Android

akademia androida Intencje oraz URI część III

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Politechnika Poznańska, Instytut Informatyki, TWO/GE. Programowanie dla ios

WSTĘP DO ANDROIDA. Laboratorium

Fragmenty są wspierane od Androida 1.6

Programowanie Urządzeń Mobilnych. Laboratorium nr 9,10

Google Android. Opracował Maciej Ciurlik

Android poradnik programisty

dr Artur Bartoszewski dr Artur Bartoszewski - Aplikacje mobilne - Wykład

Tworzenie natywnych aplikacji na urządzenia mobilne - PhoneGap Tomasz Margalski

Wprowadzenie do systemu Android

Tworzenie aplikacji na platformie Android

Pakiety i interfejsy. Tomasz Borzyszkowski

Layouty. Kilka layoutów

Instalujemy środowisko. Hello World! Odczyt/zapis informacji do komponentów na formie. onclick()

Programowanie dla Androida. Ubiquitous

Programowanie obiektowe

ANDROID. OpenGL ES 1.0. Tomasz Dzieniak

PROJEKT WSPÓŁFINANSOWANY ZE ŚRODKÓW UNII EUROPEJSKIEJ W RAMACH EUROPEJSKIEGO FUNDUSZU SPOŁECZNEGO OPIS PRZEDMIOTU. studia pierwszego stopnia

Języki i metody programowania Java. Wykład 2 (część 2)

Programowanie aplikacji mobilnych

Programowanie w Internecie. Java

Tworzenie wydajnych interfejsów. Autorzy: Piotr Michałkiewicz, 2 rok AiR Daniel Maksymow, 2 rok Informatyki

Mechanizm powiadomień

Tworzenie i wykorzystanie usług

Agenda. Wprowadzenie do Androida

Multimedia JAVA. Historia

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Programowanie obiektowe

Android tworzenie aplikacji mobilnych

Szkolenie Android dla początkujących

Początki Javy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 8

Analiza i projektowanie aplikacji Java

WSTĘP DO ANDROIDA. Laboratorium 1 Systemy i aplikacje bez granic

dr Artur Bartoszewski dr Artur Bartoszewski - Aplikacje mobilne - Wykład

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Instrukcja implementacji sterownika wirtualnego portu szeregowego dla systemu Android. Opracowanie: Elzab Soft sp. z o.o.

Lista wprowadzonych zmian w systemie Vario v. 3.3 od wydania do wydania

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)

komunikator na platformę Android wspierający protokół GG

Android pierwsza aplikacja

akademia androida Składowanie danych część VI

Zdarzenia Klasa Application Powiadomienia Toast AlertDialog

Aplikacje RMI

PROGRAMOWANIE MOBILNE: ANDROID. Marcin Luckner

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

ZAPOZNANIE SIĘ Z TWORZENIEM

Zaawansowane aplikacje WWW - laboratorium

Wykorzystanie map i geolokalizacji

Podstawowe elementy GUI - zadania

WPAM. W5 Android bardzo krótkie wprowadzenie. Piotr Gawrysiak.

Język JAVA podstawy. wykład 2, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Laboratorium 8 ( Android -pierwsza aplikacja)

Plan. Aplikacja. Architektura aplikacji. Architektura aplikacji Tworzenie aplikacji Application Builder podstawy

akademia androida Sensory część V Mobile Applications Developers

Transkrypt:

Systemy Wbudowane Dr inż. Android maf 1

Open Handset Alliance Android - podstawy Konsorcjum (sojusz) 78 firm mający na celu rozwój otwartych standardów dla urządzeń mobilnych Google, High Tech Computer (HTC), Dell, Intel, Motorola, Qualcomm, Texas Instruments, Samsung, Produkt sojuszu: Android oparty na licencji open source Wersje systemu Android Nazwa dydstrybucji Nr wersji Wersja API % rynku (marzec 2013) Jelly Bean 4.2.x 17 1,6 Jelly Bean 4.1.x 16 14,9 Ice Cream Sandwitch 4.0.x 14-15 28,6 Honeycomb 3.x.x 11-13 1,2 Gignerbread 2.3.x 9-10 44,2 Froyo 2.2 8 7,6 Eclair 2.0 i 2.1 7 1,9 Donut 1.6 4 0,2 Cupcake 1.5 3? maf 2

Android - podstawy maf 3

Podstawowe cechy Android - podstawy Jądro Linux 2.6.x i 3.0.x (od Android 4.0) Wirtualna maszyna Dalvik (DVM) Optymalizowana dla urządzeń mobilnych Pełna wielozadaniowość Brak obsługi czasu rzeczywistego Otwarte środowisko aplikacji: wielokrotne użycie i wzajemna wymiana komponentów Relacyjna baza danych SQLite Wsparcie: Zoptymalizowana grafika ze wspomaganiem sprzętowym 2D: Google Skia, 3D: Open GL ES Obsługa multimediów (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF) Telefonia GSM, Bluetooth, EDGE, 3G, Wi-Fi Obsługa aparatu fotograficznego, GPSa, akcelerometra, kompasu Zintegrowana przeglądarka oparta na silniku WebKit Obsługa HTML 5 maf 4

Android - podstawy Architektura systemu maf 5

Android - podstawy Maszyna wirtualna Dalvik (DVM) Kod bajtowy aplikacji systemu Android jest uruchamiany w Dalvik VM Charakterystyka DVM Generowanie kodu maszynowego oparte na rejestrach (w JVM na stosach redukcja liczby instrukcji) Zoptymalizowana do działania na urządzeniach o ograniczonych zasobach (pamięć, moc obliczeniowa, brak pliku wymiany) Zoptymalizowana do jednoczesnego, wydajnego uruchamiania wielu swoich instancji Pliki kodu bajtowego klas Java (*.class) przetwarzane na kod bajtowy w formacie Dalvik Executable (*.dex) Eliminacja informacji powtarzających się w plikach klas Plik DEX ma mniejszy rozmiar w stosunku do pliku JAR Od wersji Android 2.2 wbudowany kompilator JIT (Just In Time) maf 6

Android - podstawy Środowisko programowania Język Java Ponad 40 pakietów i 700 klas (najważniejsze w android.*) Możliwe wstawki C/C++ Platforma programistyczna Java 2 SE (min. JDK 5) Android SDK Eclipse IDE (min. 3.3) ADT wtyczka do Eclipse obsługująca Android SDK Emulator systemu AVD (Android Virtual Device) Symulowany 32-bitowy tryb ARM - na symulowanym procesorze uruchamiany jest Linux i platforma Android Naśladuje większość funkcji urządzenia Ograniczenia: połączenia USB i Bluetooth, obsługa słuchawek, symulacja baterii, symulacji stanu połączenia do sieci, realizacji połączeń telefonicznych maf 7

Architektura aplikacji Struktura i elementy koncepcyjne aplikacji Aplikacje są uruchamiane w oddzielnych instancjach Dalvik VM W oddzielnych procesach, w środowisku chronionej pamięci Każdy proces ma własny identyfikator ID i przydzielony priorytet Aplikacja składa się z wielu składników posiadających swój własny cykl życia Odbior. komunik. (broadcast receiver) Aktywność (activity) Usługa (service) Widok (view) Interakcje Dostawca treści (content provider) Intencja (intent) maf 8

Architektura aplikacji Aktywność (activity) Element aplikacji przeznaczona do wykonywania przez użytkownika akcji, czynności Jednostka interfejsu użytkownika - reprezentuje ekran/okno aplikacji (każdy ekran aplikacji jest oddzielną aktywnością) Może zawierać widoki (view) Aktywność wyświetla interfejs użytkownika złożony z widoków Reaguje na zdarzenia Uruchamiana przez intencję lub przez inną aktywność W danym momencie użytkownik może być w interakcji z jedną aktywnością W aplikacji możliwe jest uruchamianie aktywności z innych aplikacji Aktywności są grupowane i przechowywane na stosie Odbior. komunik. (broadcast receiver) Aktywność (activity) Usługa (service) Widok (view) Interakcje Dostawca treści (content provider) Intencja (intent) maf 9

Architektura aplikacji Widok (view) Element interfejsu użytkownika Rysowany obiekt składnik interfejsu Mający kształt etykiety, przycisku, pola edycyjnego, itp. Usługa (service) Proces działający w tle (przez dłuższy czas) Nie posiada interfejsu użytkownika Może być lokalna (w bieżącej aplikacji) lub zdalna (łączy się z innymi aplikacjami) Odbior. komunik. (broadcast receiver) Aktywność (activity) Usługa (service) Widok (view) Interakcje Dostawca treści (content provider) Intencja (intent) maf 10

Architektura aplikacji Odbiornik komunikatów (broadcast receiver) Umożliwia odbieranie komunikatów o zdarzeniach i odpowiadanie na nie (np. niski stan baterii, pobranie danych, połączenie przychodzące, wykonanie zdjęcia itp.) Komunikaty mają formę intencji (intent) i są rozgłaszane przez system lub przez inne aplikacje Nie posiada interfejsu Może tworzyć powiadomienia w pasku stanu Odbior. komunik. (broadcast receiver) Aktywność (activity) Usługa (service) Widok (view) Interakcje Dostawca treści (content provider) Intencja (intent) maf 11

Architektura aplikacji Dostawca treści (content provider): Abstrakcyjne źródło danych (dostawca lub adresat usług REST) Dla: system plików, baza SQLite, sieć Udostępnia źródło danych Zapewnia dostęp do składowanych danych Umożliwia odczyt i zapis danych Umożliwia współdzielenie danych między aplikacjami Odbior. komunik. (broadcast receiver) Aktywność (activity) Usługa (service) Widok (view) Interakcje Dostawca treści (content provider) Intencja (intent) maf 12

Intencja (intent) Architektura aplikacji Abstrakcyjny opis operacji, która ma być wykonana Definiuje możliwość wykonania czynności (np. uruchomianie aktywności, uruchomianie usługi, nadawanie komunikatu itp.) Wykorzystywana przez aplikacje lub przez system do powiadamiana różnych składników aplikacji o zdarzeniach Dla aktywności i usług intencja definiuje akcję do wykonania (VIEW, PICK, EDIT) i mogą specyfikować dane do przetworzenia (w formie URI danych) Dla odbiorników komunikatów definiuje rozgłaszany komunikat Może być jawna lub niejawna Odbior. komunik. (broadcast receiver) Aktywność (activity) Usługa (service) Widok (view) Interakcje Dostawca treści (content provider) Intencja (intent) maf 13

Cykl życia aktywności Cykl życia aplikacji Cykl życia aplikacji związany jest z cyklem życia jego składowych Cyklem życia zarządza system Aktywność zmienia stan w zależności od działań użytkownika (zamykanie okna, przywracanie itp.) Przy zmianie stanu wykonywana jest odpowiednia metoda aktywności Metoda oncreate() onstart() onrestart() onresume() onpause() onstop() Znaczenie Pierwsze utworzenie aktywności: inicjalizacja, tworzenie interfejsu użytkownika. Uruchomienie aktywności. Ponowne uruchomienie aktywności (przywrócenie na pierwszy plan), przejście ze stanu STOPPED do stanu działania. ondestroy() Przejście na pierwszy plan ze stanu PAUSED do stanu działania RESUMED. Wstrzymanie aktywności (w stan PAUSED), gdy inna aktywność przechodzi na pierwszy plan (bieżąca aktywność jest widoczna, ale częściowo zasłonięta). Ostatnia bezpieczna metoda wywoływana przed zamknięciem aplikacji. Aktywność na drugim planie (stan STOPPED, nie już widoczna). Usuwanie i zakończenie działania aktywności. maf 14

Cykl życia aktywności W pierwszej kolejności usuwane są aplikacje o niskim priorytecie, np. usługa działająca w tle ma wyższy priorytet niż aktywność znajdująca się na dnie stosu. Cykl życia aplikacji Użytkownik wywołuje aktywność Inna aplikacja żąda pamięci Inna aktywność przechodzi na pierwszy plan Aktywność przechodzi na pierwszy plan Aktywność nie jest już widoczna Aktywność kończy działanie lub jest zabijana przez system Aktywność przechodzi na pierwszy plan (użytkownik aktywuje ją) maf 15

Cykl życia aplikacji Szkielet aplikacji metody zmiany stanu (callbacks) obiekt zawierający public class PrzykladSzkieletu extends Activity { @Override poprzedni stan public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate);... // aktywność jest tworzona @Override } protected void onpause() { @Override super.onpause(); protected void onstart() { // inna atywność przejmuje fokus super.onstart(); // (ta aktywność będzie pauzowana). // aktywność ma się stać widoczna } } @Override @Override protected void onstop() { protected void onresume() { super.onstop(); super.onresume(); // aktywność jest niewidoczna // aktywność stała się widoczna // (jest zatrzymywana) // (jest wznowiona) } } @Override... protected void ondestroy() { super.ondestroy(); // aktywność będzie usunięta callbacks } } maf 16

Struktura aplikacji Budowa aplikacji Szablon generowany automatycznie po utworzeniu projektu Skład: Nazwa.java kod źródłowy głównej klasy AndroidManifest.xml deskryptor aplikacji Określa zawartość i zachowanie aplikacji Deklaruje składniki aplikacji (aktywności, usługi, dostawców treści, odbiorniki kom.), uprawnienia konieczne do działania aplikacji i wymagania sprzętowe R.java kod klasy R, identyfikatory zasobów main.xml główny plik zasobów Opis i definicja interfejsu (układu graficznego) strings.xml dodatkowe zasoby Struktura katalogów /assest /bin /gen /res /src Dowolne dane (nieskompresowane), nie traktowane jak zasoby Pliki binarne *.class, *.dex, *.apk Pliki generowane (plik R.java) posegregowane na pakiety Zasoby aplikacji Pliki źródłowe *.java posegregowane na pakiety Pliki zasobów maf 17

AndroidManifest.xml Budowa aplikacji W węzłach deklaruje składniki aplikacji, uprawnienia konieczne do działania aplikacji i inne elementy <manifest> główny węzeł pliku Musi zawierać węzeł <application> i pola: - android= przestrzeń_nazw_androida, oraz - package= nazwa_pakietu nazwę pakietu aplikacji <supports-screens> określa wymagane rozmiary ekranu: small, normal, large, extra large i rozdzielczość: low, medium, high, extra high <uses-permission> określa uprawnienia, które muszą być udzielone aplikacji w czasie instalacji Konieczne do prawidłowego działania aplikacji Przykładowe uprawnienia: READ_CONTACTS, WRITE_CONTACTS do odczytu/zapisu listy kontaktów RECEIVE_SMS, SEND_SMS do odbioru i wysyłania wiadomości SMS BLUETOOTH uprawnienie do łączenia się z urządzeniami Bluetooth maf 18

Budowa aplikacji AndroidManifest.xml Węzły (c.d.) <uses-sdk> określa kompatybilność aplikacji z wersjami Android (minimalną wymaganą wersję API i/lub docelową i/lub maksymalną) <uses-feature> określa wymagania sprzętowe np. aparat fotograficzny, Bluetooth itp. <application> deklaruje aplikację, opisuje jej właściwości, zawiera węzły: <activity> deklaruje aktywność <service> deklaruje usługę <receiver> deklaruje odbiornik komunikatów <provider> deklaruje dostawcę treści <uses-library> deklaruje użycie dodatkowych bibliotek Te elementy mogą posiadać własne filtry intencji <intent-filter> precyzujące, które intencje będą obsługiwane maf 19

Budowa aplikacji AndroidManifest.xml - przykład <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.mojpakiet" Nazwa głównego pakietu jest kojarzona android:versioncode="1" z nazwą aktywności i jej klasą: android:versionname="1.0"> org.mojpakiet.jeden <uses-sdk android:minsdkversion="10"/> wersja API (10=Android 2.3) <application android:icon="@drawable/ic_launcher" ikona aplikacji (w zasobach) android:label="@string/app_name"> nazwa aplikacji (w string.xml) <activity deklaracja aktywności android:label="@string/app_name" android:name=".jeden"> Filtr intencji dla aktywności. Definiuje jak <intent-filter > (czym) można aktywować aktywność. <action android:name="android.intent.action.main"/> <category android:name="android.intent.category.launcher"/> </intent-filter> </activity> Określenie aktywności początkowej. Przy uruchamianiu </application> aplikacji odczytywany jest plik manifestu, wyszukiwane są i </manifest> uruchamiane aktywności o akcji MAIN i kategorii LAUNCHER. maf 20

Budowa aplikacji Koncepcja interfejsu użytkownika Podstawowe składniki interfejsu Widok (View) kontrolka Widok kontroluje prostokątny obszar wewnątrz okna Podstawowy element interfejsu użytkownika Ma przypisany unikalny ID Pojemnik (GroupView) Kontener służący do przechowywania innych widoków Układ graficzny (Layout) Layout jest niewidocznym pojemnikiem rozszerzającym klasę ViewGroup Układ graficzny zarządza rozmieszczeniem kontrolek wewnątrz pojemnika Widoki mogą być opisane w plikach XML Okno Domyślnie okno aktywności zajmuje całą powierzchnię ekranu Zawartość jest podporządkowana hierarchii widoku Układy widoków są określany za pomocą obiektów klasy Layout maf 21

Budowa aplikacji Elementy interfejsu widoki maf 22

Układy graficzne Budowa aplikacji Układy graficzne (layout / layout manager) Kontenerowe klasy widoku, pełniące rolę pojemników na widoki Zarządzają rozmiarami, rozmieszczeniem i pozycjonowaniem elementów podrzędnych (kontrolek lub innych układów) Idea podobna jak w Swing maf 23

Budowa aplikacji Tworzenie interfejsu użytkownika Metoda programowa niezalecana Interfejs definiowany bezpośrednio w kodzie źródłowym Java Trudności w wiązaniu i kojarzeniu ze sobą elementów interfejsu Małe zmiany w interfejsie mogą wymagać dużych zmian w kodzie źródłowym Java Metoda deklaracyjna (deklaratywna) zalecana Metoda inspirowana modelem tworzenia aplikacji MVC Interfejs definiowany w oparciu o pliki XML zapisywane w urządzeniu w postaci binarnej Separacja warstwy prezentacji (widoku) od warstwy logiki (kodu) Można zmieniać wygląd i zachowanie aplikacji poprzez edycję plików XML Kompilowane narzędziem AAPT (ang. Android Asset Packaging Tool) Struktura pliku XML ma postać drzewa elementów, w którym każdy węzeł opisuje właściwość elementu interfejsu maf 24

Budowa aplikacji - przykład Klasa główna kod źródłowy Jeden.java metoda programowa niezalecana package org.mojpakiet; import android.app.activity; import android.os.bundle; import android.widget.linearlayout; import android.widget.textview; aktywność początkowa (najwyższego poziomu) metoda wywoływana public class Jeden extends Activity { automatycznie gdy aktywność @Override rozpoczyna działanie public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); LinearLayout mv = new LinearLayout(this); utworzenie układu graficznego TextView tv = new TextView(this); utworzenie widoku TextView tv.settext( Witaj! Tu Jeden. ); i ustawienie napisu mv.addview(tv); dodanie widoku TextView do układu setcontentview(mv); przypisanie układu do okna ekranu - wyświetlenie układu }} maf 25

Budowa aplikacji - przykład Definiowanie widoków i odnośniki w kodzie Java Zdefiniowanie widoku w pliku XML zasobów i przypisanie ID main.xml główny plik zasobów dla głównej aktywności Węzeł w pliku XML opisuje właściwości elementu interfejsu <TextView przestrzeń nazw XML xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tv1" kontrolka TextView ma android:layout_width="fill_parent" identyfikator tv1 poprzez który android:layout_height="wrap_content" odwołujemy się do niej w kodzie android:text="@string/hello" /> szerokość i wysokość elementu na ekranie: napis umieszczony w etykiecie tekstowej TextView fill_parent wypełnia ekran identyfikator napisu to hello, wrap_content dostosowana zawartość napisu jest zdefiniowana w pliku strings.xml do zawartości elementu Utworzenie instancji widoku z opisu widoku (typowo w oncreate()) setcontentview(r.layout.id_pliku_zasobów) Odwołanie do widoku: view findviewbyid(r.id.id_widoku) maf 26

Budowa aplikacji - przykład Klasa główna kod źródłowy Jeden.java metoda deklaratywna zalecana package org.mojpakiet; import android.app.activity; import android.os.bundle; import android.widget.textview; public class Jeden extends Activity { @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); } TextView tv = (TextView) findviewbyid(r.id.tv1); } aktywność początkowa (najwyższego poziomu) metoda wywoływana automatycznie gdy aktywność rozpoczyna działanie wczytanie zasobów i wyświetlenie układu zasoby zdefiniowane w main.xml identyfikator widoku tv odwołanie się do kontrolki zdefiniowanej w XML (metoda findviewbyid) maf 27

Budowa aplikacji - przykład Główny plik zasobów main.xml Układ interfejsu zdefiniowany w main.xml jest realizowany w oknie głównej aktywności (tu: Jeden) Węzeł LinearLayout opisuje liniowy układ interfejsu użytkownika <?xml version="1.0" encoding="utf-8"?> standardowy nagłówek XML <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" układ wypełnia ekran android:orientation="vertical" > elementy interfejsu są <TextView rozkładane w poziomie android:id="@+id/tv1" węzły definiują zawartość android:layout_width="fill_parent" i opisują układ dla android:layout_height="wrap_content" elementów wewnątrz android:text="@string/hello" /> </LinearLayout> maf 28

Budowa aplikacji Składnia odnośników do zasobów Odnośnik do zasobu wiąże zasób zdefiniowany w pliku XML z jego identyfikatorem Schemat: Android:id= @[pakiet:][+]typ/identyfikator Np.: @+string/napis @string/napis symbol @ oznacza że parser ma rozwiązywać resztę łańcucha znaków pakiet nazwa pakietu (brak oznacza pakiet lokalny) + opcjonalny, oznacza, że identyfikator zostanie utworzony jeżeli jeszcze nie istnieje (jest to nowy zasób) typ rodzaj zasobu, określany przez przestrzeń nazw R.string, R.layout, R.id, R.drawable lub R.attr klasy wewnętrzne R identyfikator identyfikator zasobu (nazwa) identyfikator jest stałą typu int w pliku R.java maf 29

Budowa aplikacji - przykład Plik zasobów strings.xml Dodatkowy plik zasobów przechowuje napisy w węzłach <string> Właściwość name to identyfikator napisu <?xml version="1.0" encoding="utf-8"?> możliwe formatowanie (Java i HTML) <resources> <string name="hello">witaj! Tu <b><i>jeden</i></b>.</string> <string name="app_name">prog1</string> </resources> napis o identyfikatorze app_name Odnośniki do napisów w Java String s1 = aktywnosc.getstring(r.string.hello); Odnośniki do napisów w plikach XML <Kontrolka android:text="@string/hello" /> np. TextView referencja do obiektu aktywności napis o identyfikatorze hello maf 30

Kasa R plik R.java Budowa aplikacji - przykład Generowana automatycznie klasa R zawiera identyfikatory zasobów aplikacji z katalogu /res Dla każdego rodzaju zasobów tworzona jest klasa wewnętrzna: drawable, layout, string itd. package org.przyklad.prog1; Identyfikatory zasobów mają postać public final class R { stałych typu int. Odpowiadają zasobom, elementom zdefiniowanym public static final class attr w plikach XML, lub plikom. { } public static final class drawable { zasoby graficzne, tu: ikona public static final int ic_launcher = 0x7f020000; ic_launcher.png } public static final class layout { public static final int main = 0x7f030000; } identyfikator pliku main.xml public static final class string { public static final int app_name = 0x7f040001; public static final int hello = 0x7f040000; } } identyfikatory zasobów z pliku strings.xml maf 31

Inne aktywności Analogiczna struktura Budowa aplikacji Nazwa pliku zasobów - dowolna Rodzaje zasobów string - napisy layout układy graficzne color - kolory dimension wymiary image obrazki drawable rysowalne, kolorowe obiekty Własne pliki XML (xml) Własne pliki nieskompresowane (raw) np. pliki video Pliki dodatkowe (tzw. assest) nie są traktowane jak zasoby maf 32

Budowa aplikacji - przykład Aplikacja na emulatorze nazwa aplikacji napis etykiety TextView ekran emulowanego urządzenia Klawisze funkcyjne klawiatura numeryczna maf 33