Systemy operacyjne na platformach mobilnych

Podobne dokumenty
Obsługa SMS i telefonii

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

Systemy operacyjne na platformach mobilnych

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

Laboratorium Systemów Mobilnych. Wykład 1

[Android] Podstawy programowania

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

Powiadomienia w systemie Android

Systemy operacyjne na platformach mobilnych

Tworzenie i wykorzystanie usług

Systemy operacyjne na platformach mobilnych

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

Laboratorium Systemów Mobilnych. Wykład 2

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

Systemy operacyjne na platformach mobilnych

Android pierwsza aplikacja

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

Mechanizm powiadomień

Szybciej (pisać) Łatwiej (czytać) Prościej (utrzymywać) Marcin Wąsowski Amsterdam Standard Sp. z o.o.

Tłumaczenie i adaptacja materiałów: dr Tomasz Xięski. Na podstawie prezentacji udostępnionych przez Victor Matos, Cleveland State University.

Programowanie obiektowe

Fragmenty są wspierane od Androida 1.6

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

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

Podstawowe elementy GUI - zadania

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

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

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

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

Tworzenie dialogów i wykorzystanie klasy Toast

akademia androida Http i AsyncTask część VII

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

akademia androida Składowanie danych część VI

akademia androida Intencje oraz URI część III

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Zaawansowane aplikacje WWW - laboratorium

Wykorzystanie plików

Mechanizm zapisu preferencji

Aplikacje w środowisku Java

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:

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

Dynamiczne i wydajne tworzenie interfejsu. Piotr Michałkiewicz

Wykorzystanie map i geolokalizacji

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Layouty. Kilka layoutów

Przypomnienie o klasach i obiektach

Współbieżność w środowisku Java

Podstawowe kontrolki i ich obsługa

Programowanie obiektowe

Programowanie obiektowe

Android tworzenie aplikacji mobilnych

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

Android poradnik programisty

SQLite w systemie Android. Własny dostawca treści. Materiał teoretyczny

Programowanie obiektowe

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Multimedia JAVA. Historia

grafika 2D i animacja obsługa rotacji i elementy 3D-OpenGL w Androidzie

Klasy i obiekty cz II

Java: interfejsy i klasy wewnętrzne

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Systemy Rozproszone. Spis treści. Temat projektu: Regułowy system analizujacy logi. autorzy: Rafał Sadłowski, Sebastian Falkus, Michał Różycki

Automaty do zadań specjalnych. Olga Maciaszek-Sharma, Artur Kotow Wersja 1,

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 4

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

Systemy Rozproszone - Ćwiczenie 6

Laboratorium 1. Wzorce oprogramowania lab1, Zofia Kruczkiewicz

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Tworzenie aplikacji w języku Java

Aplikacje w środowisku Java

Metody dostępu do danych

Polimorfizm. dr Jarosław Skaruz

Technologie i usługi internetowe cz. 2

Programowanie obiektowe

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

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

I. Usługi. Usługa może przyjąć dwie formy:

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

Dokumentacja do API Javy.

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

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Programowanie dla Androida. Ubiquitous

RESTful Android. Na co zwrócić uwagę przy tworzeniu aplikacji klienckich REST na Androidzie

Warsztaty v2 Layout y i widget y. Tomasz Wachowski Kamil Snopek Jan Romaniak

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

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

protected void onsaveinstancestate(bundle outstate); protected void onrestoreinstancestate(bundle savedinstancestate);

Podstawowe elementy GUI - zadania

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

Wykład 4: Klasy i Metody

Budowa aplikacji wielowarstwowych zastosowanie szablonów. Laboratorium 2 Programowanie komponentowe Zofia Kruczkiewicz

Podstawy tworzenia aplikacji z wykorzystaniem języka Java ME ćwiczenia 2

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy

Programowanie obiektowe

Transkrypt:

Systemy operacyjne na platformach mobilnych Wykład 3 Grzegorz Jabłoński, Piotr Perek Katedra Mikroelektroniki i Technik Informatycznych

Zagadnienia wykładu Menu opcji ListActivity własny widok własny adapter BroadcastReceiver Serwis 2

Tworzenie menu Podobnie jak w przypadku widoków, menu może być zdefiniowane na dwa sposoby: w języku Java w formie pliku XML 3

Tworzenie menu - Java Dodaj element menu public boolean oncreateoptionsmenu(menu menu) { super.oncreateoptionsmenu(menu); menu.add( 0, ReviewCriteria.MENU_GET_REVIEWS, 0, R.string.menu_get_reviews).setIcon(android.R.drawable.ic_menu_more); return true; Identyfikator grupy Identyfikator elementu Kolejność w menu Tekst Ikona 4

Tworzenie menu - Java public boolean oncreateoptionsmenu(menu menu) { menu.add(menu.none, ID_MENU_OPTION_A, 0, "Option A"); menu.add(menu.none, ID_MENU_OPTION_B, 1, "Option B"); menu.add(menu.none, ID_MENU_OPTION_C, 2, "Option C"); SubMenu submenu = menu.addsubmenu(menu.none, ID_MENU_SUBMENU, 3, "Submenu"); submenu.add(menu.none, ID_SUBMENU_OPTION_A, 0, "Option A"); submenu.add(menu.none, ID_SUBMENU_OPTION_B, 1, "Option B"); submenu.add(menu.none, ID_SUBMENU_OPTION_C, 2, "Option C"); return true; 5

Tworzenie menu - XML <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/option_a" android:title="option A"/> <item android:id="@+id/option_b" android:title="option B"></item> <item android:id="@+id/option_c" android:title="option C"></item> <item android:title="submenu"> <menu> <item android:id="@+id/submenu_option_a" android:title="option A"/> <item android:id="@+id/submenu_option_b" android:title="option B"/> <item android:id="@+id/submenu_option_c" android:title="option C"/> </menu> </item> </menu> 6

Tworzenie menu - XML MenuInflater tworzy obiekty języka Java na podstawie pliku XML public boolean oncreateoptionsmenu(menu menu) { //Inflate the menu; this adds items to the action bar if it is present. getmenuinflater().inflate(r.menu.main, menu); return true; Plik XML opisujący menu 7

Obsługa zdarzenia wyboru menu public boolean onmenuitemselected(intfeatureid, MenuItem item) { switch(item.getitemid()) { case MENU_GET_REVIEWS: handlegetreviews(); return true; Sprawdzenie który element menu został wybrany return super.onmenuitemselected(featureid, item); Funkcja obsługująca daną opcję 8

Okno dialogowe private boolean validate() {... if(!valid) { new AlertDialog.Builder(this).setTitle(getResources().getString(R.string.alert_label)).setMessage(validationText.toString()).setPositiveButton( "Continue", new android.content.dialoginterface.onclicklistener() { public void onclick(dialoginterface dialog, int arg1) { ).show(); validationtext = null; return valid; Klasa tworząca okno dialogowe 9

ListActivity Służy do wyświetlenia zbioru danych np. tablicy w postaci przewijanej listy Umożliwia obsługę wyboru poszczególnych elementów listy Wymaga, aby layout definiujący widok zawierał obiekt ListView o identyfikatorze @android:id/list 10

ListActivity - implementacja public class MainActivity extends ListActivity { protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); Dziedziczenie po ListActivity String[] items = new String[] { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7", "Item 8", "Item 9", "Item 10"; ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.r.layout.simple_list_item_1, items); setlistadapter(adapter); Podstawowy adapter konwertujący tablicę na zestaw widoków dla ListActivity 11

Własny layout wierszy <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <TextView android:id="@+id/textview1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="4" android:text="" android:textcolor="@android:color/holo_red_light" android:textstyle="bold" /> <TextView android:id="@+id/textview2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="" android:textcolor="@android:color/holo_blue_light" /> Wiersz składa się z dwóch pól tekstowych: textview1 i textview2 </LinearLayout> 12

Własny layout wierszy protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); ArrayList<HashMap<String, String>> values = new ArrayList<HashMap<String,String>>(); for(int i = 0; i < 100; i++) { HashMap<String, String> map = new HashMap<String, String>(); map.put("id", String.valueOf(i)); map.put("text", "item" + String.valueOf(i)); values.add(map); Nazwa pliku opisującego layout dla pojedynczego wiersza SimpleAdapter adapter = new SimpleAdapter(this, values, R.layout.row_layout, new String[]{"id", "text", new int[]{r.id.textview1, R.id.textView2); setlistadapter(adapter); Mapowanie kluczy mapy na widoki 13

Własny adapter public class MySimpleAdapter extends ArrayAdapter<MyContact>{ private final Context context; private final MyContact[] contacts; public MySimpleAdapter(Context context, MyContact[] objects) { super(context, R.layout.row_layout, objects); this.context = context; this.contacts = objects; public View getview(int position, View convertview, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) context.getsystemservice(context.layout_inflater_service); View rowview = inflater.inflate(r.layout.row_layout, parent, false); TextView textview1 = (TextView) rowview.findviewbyid(r.id.textview1); TextView textview2 = (TextView) rowview.findviewbyid(r.id.textview2); textview1.settext(string.valueof(contacts[position].getname())); textview2.settext(contacts[position].getphone()); return rowview; 14

Własny adapter protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); MyContact contacts[] = new MyContact[10]; contacts[0] = new MyContact("Contact 1", "600-100-200");... MySimpleAdapter adapter = new MySimpleAdapter(this, contacts); setlistadapter(adapter); 15

BroadcastReceiver Umożliwia odbiór intencji rozsyłanych do wszystkich aplikacji w systemie za pomocą funkcji sendbroadcast() Może być zdefiniowany w pliku AndroidManifest.xml (tag <receiver>) lub tworzony i rejestrowany dynamicznie z użyciem funkcji registerreceiver() Dostarcza metodę onreceive(), która jest wywoływana w momencie odebrania intencji Obiekty klasy BroadcastReceiver mają krótki cykl życia i po wywołaniu metody onreceive() mogą zostać usunięte przez system W związku z powyższym w klasach BroadcastReceiver nie można wykonywać operacji asynchronicznych (uruchamiać wątków, wyświetlać okien) 16

BroadcastReceiver Klasa dziedzicząca po BroadcastReceiver <receiver android:name=".service.weatheralertservicereceiver"> <intent-filter> <action android:name="android.intent.action.boot_completed" /> </intent-filter> </receiver> Intencja dla której zostanie wywołany BroadcastReceiver <uses-permission android:name="android.permission.receive_boot_completed"/> 17

Odbiór rozgłaszanych intencji public classweatheralertservicereceiver extends BroadcastReceiver { public void onreceive(context context, Intent intent) { if(intent.getaction().equals(intent.action_boot_completed)) { context.startservice(newintent(context, WeatherAlertService.class)); 18

Service Działa w tle Jest używany do wykonywania długotrwałych operacji (np. ściąganie danych z internetu, sprawdzanie czy pojawiły się nowe dane) Nie posiada interfejsu do bezpośredniej interakcji z użytkownikiem Działa z wyższym priorytetem niż nieaktywne i niewidoczne aktywności Domyślnie jest uruchamiany w głównym wątku aplikacji, dlatego zalecane jest utworzenie nowego wątku do wykonywania zadań wymagających dużej ilości zasobów Serwisy działające w głównym wątku aplikacji są nazywane serwisami lokalnymi 19

Service - implementacja AndroidManifest.xml <service android:name="com.example.calcservice.calculatorservice" > <intent-filter > <action android:name="com.example.calcservice.icalc"/> </intent-filter> </service> 20

Serwis Service - implementacja public class CalculatorService extends Service { IBinder mbinder = new LocalBinder(); public class LocalBinder extends Binder { public CalculatorService getserverinstance() { return CalculatorService.this; public double calculate(char op_code, double arg_a, double arg_b) throws RemoteException {... return result; public CalculatorService() { public IBinder onbind(intent intent) { return mbinder; 21

Aktywność Service - implementacja protected void onstart() { super.onstart(); if(!bound) { bindservice(new Intent(this, CalculatorService.class), connection, Context.BIND_AUTO_CREATE); 22

Aktywność Service - implementacja private ServiceConnection connection = new ServiceConnection(){ public void onserviceconnected(componentname name, IBinder service) { LocalBinder mlocalbinder = (LocalBinder)service; mservice = mlocalbinder.getserverinstance(); Toast.makeText(CalcSimple.this, "Connected to service", Toast.LENGTH_LONG).show(); bound = true; public void onservicedisconnected(componentname name) { mservice = null; Toast.makeText(CalcSimple.this, "Disconnected from service", Toast.LENGTH_LONG).show(); bound = false; ; 23