PROGRAMOWANIE MOBILNE: ANDROID. Marcin Luckner

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

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

akademia androida Pierwsze kroki w Androidzie część I

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

Android, wprowadzenie do SDK

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

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

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

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

Systemy operacyjne na platformach mobilnych

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

Programowanie usług działających w tle

Systemy operacyjne na platformach mobilnych

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

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

Programowanie dla Androida. Ubiquitous

Mobilne aplikacje multimedialne

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

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

Laboratorium Systemów Mobilnych. Wykład 1

SOP System Obsługi Parkingów

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:

Layouty. Kilka layoutów

Systemy operacyjne na platformach mobilnych

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

Systemy operacyjne na platformach mobilnych

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

Zdarzenia Klasa Application Powiadomienia Toast AlertDialog

akademia androida Intencje oraz URI część III

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

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

WSTĘP DO ANDROIDA. Laboratorium

[Android] Podstawy programowania

Laboratorium Systemów Mobilnych. Wykład 2

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

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

Programowanie urządzeń mobilnych w systemie Android

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

Programowanie Obiektowe GUI

Near Field Communication

Podstawowe elementy GUI - zadania

Kurs programowania. Wykład 7. Wojciech Macyna. 25 kwietnia 2017

Laboratorium 9 (Więcej Aktywności, w Androidzie)

Architektury Usług Internetowych. Laboratorium 2. Usługi sieciowe

Obsługa SMS i telefonii

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

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

Systemy operacyjne na platformach mobilnych

Tworzenie aplikacji na platformie Android

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

Mechanizm powiadomień

Android tworzenie aplikacji mobilnych

Agenda. Activity cd Layouty Jednostki Dialogi LogCat Drugie Activity i Intents Serializacja Własne widoki Menu

Projektowanie, tworzenie aplikacji mobilnych na platformie Android

Programowanie aplikacji mobilnych

3.4. Opis konfiguracji layoutów.

Delphi podstawy programowania. Środowisko Delphi

Java jako język programowania

Powiadomienia w systemie Android

Programowanie urządzeń mobilnych

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Fragmenty są wspierane od Androida 1.6

Połączenie aplikacji mobilnej z Facebookiem

Szkolenie Android dla początkujących

Pakiety i interfejsy. Tomasz Borzyszkowski

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

Aplikacje RMI

Programowanie aplikacji mobilnych

Metody dostępu do danych

akademia androida Sensory część V Mobile Applications Developers

Wątki w Android OS. Matt Rutkowski. GynSoft sp. z o.o. matt@gynsoft.net

Ćwiczenie 1. Przygotowanie środowiska JAVA

SpriteKit. Biblioteka do tworzenia gier wbudowana w SDK. Wspiera grafikę 2D w oparciu o sprite y

Rysowanie. Rysowanie - podstawy

Specyfikacja API Runtime BAS 3.0

Programowanie niskopoziomowe

Programowanie aplikacji mobilnych

Android i Bluetooth Low Energy. Laboratorium 4 Niestacjonarne

Język UML w modelowaniu systemów informatycznych

Instrukcja laboratoryjna nr.2

1 Zapoznanie się ze środowiskiem Xenomai.

Java Podstawy. Michał Bereta

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Programowanie dla Androida. Ubiquitous

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

Programowanie dla Androida

MentorGraphics ModelSim

Java Podstawy JUST JAVA Michał Bereta Intytu Modelowania Komputerowego Wydział Fizyki, Matematyki i Informatyki Stosowanej

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład.

Przykłady tworzenia aplikacji komponentowych w technologii JavaServer Faces 2.1 na podstawie

Tworzenie i wykorzystanie usług sieciowych

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

OSGi Agata Hejmej

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

Programowanie obiektowe zastosowanie języka Java SE

Dział Dopuszczający Dostateczny Dobry Bardzo dobry Celujący

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

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Transkrypt:

PROGRAMOWANIE MOBILNE: ANDROID Marcin Luckner http://mini.pw.edu.pl/~lucknerm/ mluckner@mini.pw.edu.pl

Aplikacja

Aplikacja Technicznie - zbiór komponentów Dla użytkownika - zbiór zadań Zadanie to zbiór aktywności Aplikacja może używać komponentów innych aplikacji

KOMPONENTY 1. Aktywności (Activities) aktywność odpowiada pojedynczemu ekranowi wraz z interfejsem użytkownik 2. Usługi (Services) działają w tle nie dostarczają UI 3. Dostawcy treści(content providers) zarządza dostępem do uporządkowanych zbiorów danych 4. Odbiorcy komunikatów(broadcast receivers) otrzymuje wysłane intencje (Intent)

Zadanie

Aktywności zebrane w zadanie

PIASKOWNICA Android jest systemem wielu użytkowników (Linux) Każda aplikacja ma unikalny identyfikator użytkownika Uruchomienie aplikacji to uruchomienie maszyny wirtualnej Każda aplikacja uruchamia własny proces Linuxowy

Proces aplikacji

Cykl życia aplikacji oncreate() Aplikacja startuje onlowmemory() Jeżeli systemowi brakuje pamięci i chce ograniczyć zasoby aplikacji ontrimmemory(int level) Jeżeli system chce ograniczyć zasoby dla danego procesu level określa poziom braku pamięci onterminate() Nie występuje na urządzeniach z Androidem (tylko emulator) onconfigurationchange() Jeżeli zmienia się konfiguracja urządzenia podczas działania aplikacji.

Zamykanie Android utrzymuje proces aplikacji przy życiu tak długo jak się da Używa pięcio poziomowej hierarchii, aby wybrać proces do zamknięcia.

Priorytety procesów 1. Foreground Proces właśnie wykorzystywany przez użytkownika 2. Visible Procesy których aktywności są widoczne, ale nie są aktywne (np. zatrzymane przez powiadomienie) 3. Service Proces z usługami 4. Background Proces z zatrzymanymi aktywnościami 5. Empty Proces bez aktywnych komponentów

PRZYGOTOWANIE APLIKACJI SDK generuje zarchiwizowany plik Android application package (*.apk) Plik APK zawiera skompilowane źródła i zasoby Każda aplikacja działa w piaskownicy (sandboxed environment)

WEWNĄTRZ APLIKACJI 1. Plik manifestu 1. Określa komponenty i wymagane cechy urządzenia dla danej aplikacji 2. Zasoby 1. Oddzielone od kodu aplikacji i pozwalające na optymalizację działania aplikacji dla różnych konfiguracji urządzenia 3. Podstawowe komponenty

Struktura APK AndroidManifest.xml META-INF CERT.RSA CERT.SF MANIFEST.MF classes.dex (skompilowane klasy) res drawable layout resources.arcs (skompilowane zasoby)

Plik manifestu

Plik manifestu 1. Określa pakiet Javy zawierający aplikację 2. Opisuje komponenty aplikacji 1. Określa klasy implementujące komponenty 3. Ustawia zezwolenia

<manifest> <uses-permission /> <permission /> <permission-tree /> <permission-group /> <instrumentation /> <uses-sdk /> <uses-configuration /> <uses-feature /> <supports-screens /> <compatible-screens /> <supports-gl-texture /> <application> </application>

<uses-sdk> <manifest xmlns:android=http://schemas.android.com/apk/res/ android > <uses-sdk android:minsdkversion="8" android:targetsdkversion="17" /> </manifest> Przestrzeń nazw Minimalne wymagane API Porządane API

<application> <activity> <intent-filter> <action /> <category /> <data /> </intent-filter> <meta-data /> </activity> <activity-alias> <intent-filter>... </ intent-filter> <meta-data /> </activity-alias> <service> <intent-filter>... </intent-filter> <meta-data/> </service> <receiver> <intent-filter>... </intent-filter> <meta-data /> </receiver> <provider> <grant-uri-permission /> <meta-data /> <path-permission /> </provider>

Aktywność początkowa <activity android:name=".mainactivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> MAIN aktywność nie potrzebuje początkowych danych LAUNCHER pierwsza aktywność w aplikacji android:name - package_from_manifest.class

Manifest.MF Signature-Version: 1.0 Created-By: 1.0 (Android) SHA1-Digest-Manifest: wxqneai0ua5no5qj8cgmwjkggwe=... Name: res/layout/exchange_component_back_bottom.xml SHA1-Digest: eacjmjesj7zkf0cbftz0nqwrt7w=... Name: res/drawable-hdpi/icon.png SHA1-Digest: DGEqylP8W0n0iV/ZzBx3MW0WGCA=

Zasoby

Zasoby aplikacji 1. Zasoby układu Określają układ interfejsu aplikacji Zapisane w res/layout Dostęp poprzez klasę R.layout 2. Elementy graficzne Określają grafikę jako bitmapy lub XML Zapisane w res/drawable Dostęp poprzez klasę R.drawable 3. Zasoby tekstowe Określają teksty, tablice tekstów i teksty ilościowe Zapisane w res/values Dostęp poprzez klasy R.string, R.array, R.plurals 4. Inne zasoby Inne zasoby w tym: Bool, Color, Dimension. Zapisane wres/values Dostęp poprzez klasy R.bool, R.color, R.dimen

R.plurals Teksty ilościowe (Plurals) Zasób XML z różnymi wartościami dla liczby mnogiej Wspierane wartości: zero, one, two, few, many, i other. <?xml version="1.0" encoding="utf-8"?> <resources> <plurals name="numberofsongsavailable"> <item quantity="one">znaleziono %d piosenkę.</item> <item quantity="few">znaleziono %d piosenki.</item> <item quantity="other">znaleziono %d piosenek.</item> </plurals> </resources> int count = getnumberofsongsavailable(); Resources res = getresources(); String songsfound = res.getquantitystring(r.plurals.numberofsongsavailable, count, count); 24

DOSTĘP DO ZASOBÓW POPRZEZ XML Składnia @[<package_name>:]<resource_type>/ <resource_name> Przykład Definicja tekstu w pliku XML res/values/ strings.xml: <resources> <string name="hello">hello!</string> </ resources> XML odczytujący wartość <EditText xmlns:android="http://schemas.android.com/ apk/res/android" android:text="@string/hello" />

DOSTĘP DO ZASOBÓW W KODZIE Składnia [<package_name>.]r.<resource_type>.<resource_na me> Przykład Definicja tekstu w pliku XML res/values/strings.xml: <resources> <string name="hello">hello!</string> </ resources> Kod odczytujący wartość String string = getstring(r.string.hello)

GRUPOWANIE TYPÓW ZASOBÓW Każdy typ zasobów musi być w określonym podkatalogu katalogu res/ Pliki z zasobami nie mogą być umieszczane bezpośrednio w katalogu res/ Błąd kompilacji Przykładowa hierarchia zasobów res/ drawable/ icon.png layout/ main.xml info.xml values/ strings.xml

ALTERNATYWNE ZASOBY Prawie każda aplikacja wymaga zdefiniowania alternatywnych zasobów dla wsparcia szczególnej konfiguracji urządzenia Podczas uruchomienia aplikacji Android wykrywa aktualną konfigurację i wczytuje odpowiednie zasoby Tworzenie zasobów Stwórz podkatalog w res/ stosując składnię: <resources_name>-<config_qualifier> Zapisz odpowiednie zasoby w katalogu

Określenia (QUALIFIERS) MCC/MNC (mobile country code/ mobile network) mcc260 (Poland), mcc260-mnc003 (Poland-Orange) Język i rejon en, fr, en-rus, fr-rfr, fr-rca Kierunek układu ldrtl (layout-direction-right-to-left), ldltr (vice versa) Orientacja ekranu port (pionowa), land (pozioma) typ UI car, desk, television, appliance (dokowanie)

GŁÓWNE ZASADY 1. Różne typy zasobów znajdują się w różnych podkatalogach res/ 2. Zasoby alternatywne znajdują się w plikach o nazwach określonych przez konfigurację 3. Zawsze umieszczaj domyślne zasoby, aby aplikacja nie bazowała tylko na wyszczególnionych konfiguracjach

SZCZEGÓŁOWE ZASADY 1. Można użyć wielu określeń do specyfikacji zasobu drawable-en-rus-land Agielski amerykański, telefon w orientacji poziomej 2. Wymagana określona kolejność 3. Nie można zagnieżdżać alternatywnych zasobów 4. Każdy typ określenia może być użyty tylko raz dla danego zestawu zasobów

Aktywność

Aktywność Skupiona na jednym temacie Zazwyczaj powiązana z interfejsem Zadania aktywności Tworzenie UI Kontrola stanu Cel Intencji Obsługa zdarzeń UI Nadzorowanie menu

Stos aktywności Jedna aktywność na raz Najważniejsza jest aktualna aktywność Aktualna aktywność może być zmieniona przez użytkownika lub system Zmienia się wtedy stan aktywności

STANY AKTYWNOŚĆ Działająca, Running (Resumed) na pierwszym tle, aktywna dla użytkownika Zawieszona, Paused wciąż widoczna, ale przesłonięta przez inną aktywność, zakrywającą część ekranu nie reaguje na polecenia użytkownika nie wykonuje kodu Zatrzymana Stopped niewidoczna na ekranie

Akcje Uruchamianie Aktywności oncreate() onstart() onresume() Aktywna Aktywność onpause() -przez inną Aktywność onstop() -zakończona lub zniszczona ondestroy() Zamykanie Aktywności

Cykl życia

Wstrzymywanie i wznawianie

Zatrzymywanie i ponowne uruchamianie

Szczegóły akcji oncreate() Inicjacja Wywoływane tylko raz Bundle - zapis stanu onpause() Ostatnia szansa by zapisać stan! System może uśmiercić proces po zakończeniu tej metody ondestroy() Wywoływane przez finish() Wywoływane przez system by zwolnić zasoby

Aktywności i Konfiguracja Konfiguracja definiuje wszystkie informacje o konfiguracji urządzenia konfiguracja sprzętowa orientacja urządzenia lokalizacja Zmiany niszczą Aktywność onpause() ondestroy()

Zmiany orientacji

ŁĄCZENIE AKTYWNOŚCI 1. Utwórz drugą aktywność 2. Dodaj ją do manifestu 3. Utwórz Intencję 4. Uruchom drugą Aktywność

Pierwsza aktywność <activity android:name=".mainactivity" android:label="@string/ app_name"> <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity>

TWORZENIE DRUGIEJ AKTYWNOŚCI Podklasy Activity muszą implementować metodę oncreate() W metodzie należy zdefiniować układ (layout) aktywności poprzez metodę setcontentview()

DODAWANIE DO MANIFESTU Wszystkie Aktywności muszą być zdefiniowane w manifeście

UTWORZENIE DRUGIEJ AKTYWNOŚCI Uruchamianie startactivity() przekazuje Intencję (Intent) Intent jest obiektem łączącym dwa osobne komponenty, takie jak dwie aktywności, gdzie jeden uruchamia drugi

Komunikacja między Aktywnościami Aktywność może dodać dodatkowe informacje do Intencji Aktywność może odczytać informacje z otrzymanej Intencji

Intencja

Rodzaje Intencji Bezpośrednia EXPLICIT INTENT Intencja określa, który komponent aplikacji ma otrzymać Intencję do realizacji Pośrednia IMPLICIT INTENT Intencja nie określa odbiorcy, ale pozwala dowolnej zainstalowanej aplikacji odpowiedzieć na Intencję

EXPLICIT INTENT Uruchamiany komponent jest określany przez klasę Zazwyczaj komponent z tej samej aplikacji

IMPLICIT INTENT Określa akcję do wykonania Komponenty z innej aplikacji mogą go obsłużyć

Implict Intent - schemat

Implict intent w działaniu

IntentFilter Określa czy Intent może być obsłużony przez komponent w pliku manifestu Klasa PacketManager nadzoruje wszyskie deklaracje

Atrybuty dla Intent i IntentFilter

Akcje ACTION_MAIN ACTION_VIEW ACTION_ATTACH_DATA ACTION_EDIT ACTION_PICK ACTION_CHOOSER ACTION_GET_CONTENT ACTION_DIAL ACTION_CALL ACTION_SEND ACTION_SENDTO ACTION_ANSWER ACTION_INSERT ACTION_DELETE ACTION_RUN ACTION_SYNC ACTION_PICK_ACTIVITY ACTION_SEARCH ACTION_WEB_SEARCH ACTION_FACTORY_TEST

Kategorie CATEGORY_DEFAULT CATEGORY_BROWSABLE CATEGORY_TAB CATEGORY_ALTERNATIVE CATEGORY_SELECTED_ALTE RNATIVE CATEGORY_LAUNCHER CATEGORY_INFO CATEGORY_HOME CATEGORY_PREFERENCE CATEGORY_TEST CATEGORY_CAR_DOCK CATEGORY_DESK_DOCK CATEGORY_LE_DESK_DOCK CATEGORY_HE_DESK_DOCK CATEGORY_CAR_MODE CATEGORY_APP_MARKET

Połączenie Intent i IntedFilter

Złożony InterFilter

Testowanie Action Category Data

Intent i Usługi (Services) Zawsze używaj bezpośredniej Intencji uruchamiając Usługi (Services) Nie deklaruj IntentFilters dla swoich usług Używanie pośredniej Intencji uruchamia usługi bez kontroli Deweloperów Użytkowników Nikt nie wie, która usługa zostanie uruchomiona!

Linki Android Security Overview The AndroidManifest.xml File Accessing Resources String Resources Providing Alternative Resources Configuration qualifier names Intent Intents and Intent Filters http://slide.es/kamilgrondys