View
218
Download
0
Category
Preview:
Citation preview
3
Agenda
• Czym jest bada?
• SHP a bada
• Tworzenie aplikacji na platformie bada
• SDK i IDE
• Jak działają aplikacje na platformie bada
• Praktyka kodowania na platformie bada
• API udostępniane przez platformę
• Przykładowa aplikacja
5
Czym jest bada?
Dla programistów:
Ocena możliwości w tworzeniu
bogatych aplikacji
Dla użytkowników:
Bogate doświadczenie w korzystaniu
z wielu nowych aplikacji
Nowa platforma dla Smartphonów
6
Smartphon dla każdego
Użytkownicy smartphonów
Użytkownicyfeaturephonów Użytkownicy
smartphonówUżytkownicy
featurephonów
Obecny rynek smartphonów Rynek po wprowadzeniu bady
Główny cel to nie tworzenie kolejnego segmentu na rynku smartphonów
ale rozszerzenie go na użytkowników featurephonów
7
• 100+ operatorów w 80+ krajach
• bada 1.0Category Specifications
Network 2.5G (GSM/ GPRS/ EDGE)
3G (WCDMA/ HSPA)
Processor 1GHz
Display 3.3” WVGA (800×480) Super AMOLED
Camera 5.0 Megapixel camera with LED Flash
Video HD(720p) video playback & recording
Connectivity
Bluetooth v3.0
USB v2.0 (Full Speed)
Wi-Fi 802.11 b/g/n
Memory 2GB + microSD expansion (Up to 32GB)
Size 118 x 56 x 10.9mm
Battery (Standard) Li-Ion, 1,500 mAh
Wave - pierwszy telefon z platformą bada
8
Category Specifications
Network 2.5G (GSM/ GPRS/ EDGE) : 850 / 900 / 1800 / 1900 MHz
Display 3.2” / TFT / WQVGA
Camera 3 Megapixel camera
VideoVideo playing & recording
MPEG4, H.263, H.264
AudioMusic Player with SoundAlive, Music Recognition,
3.5mm Ear Jack, FM Radio/ Recording
ConnectivityBluetooth technology v3.0
USB 2.0 FS, MicroUSB
Wi-Fi 802.11b/g/n
Memory 100MB + microSD (up to 16GB)
Size 109.5 x 55 x 11.9 mm
Battery (Standard) Li-ion 1,200 mAh
•All functionality, features, specifications and other product information provided in this document
including, but not limited to, the benefits, design, pricing, components, performance, availability,
and capabilities of the product are subject to change without notice or obligation.
Wave525 – bada 1.1
9
Category Specifications
Network 2.5G: GPRS/EDGE 850/900/1800/1900
Display 3.2” / TFT / WQVGA
Camera 3 Megapixel camera
VideoVideo playing & recording
MPEG4, H.263, H.264
AudioMusic Player with SoundAlive, Music Recognition,
3.5mm Ear Jack, FM Radio/ Recording
ConnectivityBluetooth technology v 3.0
USB 2.0 FS, MicroUSB
Wi-Fi 802.11 b/g/n
Memory 100MB + microSD (up to 16GB)
Size 109.5 x 55 x 15.2 mm
Battery (Standard) Li-ion 1,200mAh
•All functionality, features, specifications and other product information provided in this document
including, but not limited to, the benefits, design, pricing, components, performance, availability,
and capabilities of the product are subject to change without notice or obligation.
Wave533 – bada 1.1
10
Category Specifications
Network 2.5G (GSM/ GPRS/ EDGE) : 850 / 900 / 1800 / 1900 MHz
3G (WCDMA/ HSDPA) : 900/2100 MHz
Display 3.2” / TFT / WQVGA
Camera5.0 Megapixel camera / LED Flash, AF
Smile Shot, Panorama Shot, Image Editor
VideoQVGA Video playing & recording
MPEG4, H.263, H.264
AudioMusic Player with SoundAlive, Music Recognition,
3.5mm Ear Jack, FM Radio/ Recording
ConnectivityBluetooth technology v 3.0
USB v2.0 FS, MicroUSB
Wi-Fi 802.11 b/g/n
Memory 100MB + microSD (Up to 16GB)
Size 109.5 x 53.9 x 11.8mm
Battery (Standard) Li-ion 1,200 mAh
•All functionality, features, specifications and other product information provided in this document
including, but not limited to, the benefits, design, pricing, components, performance, availability,
and capabilities of the product are subject to change without notice or obligation.
Wave723 – bada 1.1
12
SHP a bada
•SHP – Samsung Handset Platform
• Autorski system operacyjny Samsunga
• Zapewnia pełną funkcjonalność telefonu
SHP
13
SHP a bada
•Framework
• Ogólnodostępne API do frameworku
aplikacyjnego i serwisów znajdujących
się w niższych warstwach
•Serwisy
• Funkcje zapewniające dostęp do
silników aplikacji i funkcjonalności
wspieranej przez server bady
•Urządzenia
• Podstawowa funkcjonalność taka jak
grafika, multimedia, bezpieczeństwo i
łączność
•Jądro
• Nucleus
• Inne systemy
Framework
Serwisy
Urządzenia
Jądro
bada
SHP
16
Partnerstwo i przywileje
• Stopnie partnerstwa
• Basic, Partner i Core
• Uprawnienia
• Uprawnienia w dostępie do wrażliwych funkcji i zasobów systemu (ma to
na celu ochronę systemu i danych użytkownika)
• Ustawienie kontroli dostępu przy użyciu portalu dla
programistów
Rejestracja uprawnień->
Walidacja sygnatury pliku manifestu ->
Sprawdzanie w runtimie
Poziom uprawnień Opis
None Nie potrzeba żadnych uprawnień
Normal Może być używane przez każdego zarejestrowanego programistę bada
System Dostępne tylko dla programistów mających status partnera
17
Manifest.xml
•Profil aplikacji z nazwą i unikalnym ID
•Opisuje uprawnienia aplikacji
•Definiuje minimalne wymagania co do telefonu których oczekuje
aplikacja
Stwórz
profilWybierz zestaw
API
Ustaw
komponenty
Ustaw wymagania
systemoweDownload
Manifest.xml
Ściągnij
Manifest.xml
18
Pakowanie i certyfikacja aplikacji
• Certyfikacja
• Pełne testowanie przez inżynierów Samsunga
• Certyfikacja dla każdego urządzenia
• Android tego nie zapewnia, analogicznie do iPhona
• Paczka
• *.oap zawierający plik manifestu, plik z opisem, binarkę
zabezpieczoną DRMem, dodatkowe zasoby, sygnaturę
• MIME type: application/vnd.samsung.osp
19
Samsung Application Store
• Dostarczanie aplikacji głównie przez urządzenia abonenckie
• Wspiera również ładowanie za pomocą PC
• Analogicznie do iPhona i Androida
21
SDK
Pliki binarne i biblioteki Pliki nagłówkowe
DokumentacjaSymulator Przykładowe aplikacje
Do kompilacji i debugowania: GNU tool-chain
22
IDE
• Eclipse oparte na CDT (C/C++ Development Tools)
• Popularne, Android też tego używa (Windows 7 i iPhone mają
własne rozwiązania)
• Nie jest to specyficzny C++ jak w Symbianie
• Nie wszyscy lubią Jave i garbage colector
• Nie trzeba się uczyć Objective C
23
IDE
• Zintegrowane narzędzia z SDK:
• File Explorer
• Resource Monitor
• Application Wizard
• Output
• UI Builder
• Resource Explorer
24
UI Builder
UI Builder tworzy pliki XML które są ładowane i interpretowane w
runtimie
Dostępna pełna lokalizacja – wielo językowe tablice napisów
25
Symulator
• Grafika i multimedia
• Wspierany sprzętowo OpenGL ES
• Kamera z WebCamem
(pewne ograniczenia co do efektów)
• Symulator zdarzeń
• Połączenia przychodzące, SMS, WAP push
• Wskaźnik sieci i poziomu sygnału
• Poziom naładowania baterii
• Obsługa podłączenia słuchawek i kabla USB
• Akcelerometr ,czujnik ruchu, czujnik wychylenia
i inne
• Lokalizacja
• Dane NMEA i współrzędne z Google Map
• Kontrola zasobów
• Wątki, stos, pliki, bazy danych, rejestr, timery,
formularze i sokety
26
Bada 1.1
• Wraz z nowymi telefonami pojawiła się nowa wersja SDK
• Wsparcie dla telefonów WXVGA z ograniczonymi zasobami (brak
OpneGL, mało czujników, 16 bitowa przestrzeń barw)
• Warto pisać aplikacje z myślą o tańszych telefonach
• Większy rynek
• Mała konkurencja – aplikacje schodzą na pniu
• Łatwa migracja logiki aplikacji z bada 1.0
27
Bada 1.1
• Zmiany:
• Możliwość przenoszenia wcześniej napisanych aplikacji
• Automatyczne skalowanie interfejsu
• Sprawdzanie zgodności używanego API
• Uzupełnienie API, małe zmiany w istniejących funkcjach
• Wprowadzono wsparcie do testowania
• Wizard do tworzenia testów jednostkowych
• Stres testy
• Profilowanie aplikacji
29
Aplikacja dla platformy bada
• Dwa typy aplikacji• Podstawowe aplikacje
Dialer, Kontakty, Kamera, Odtwarzacz multimedialny
• Aplikacje bada
Instalowalne i usuwalne
• Tylko jedna aplikacja bada może chodzić naraz
• Analogicznie jak w iPhone OS
• Android pozwala na więcej
• Jednak aplikacja bada może działać z wieloma podstawowymi
aplikacjami
30
Start aplikacji
Punkt wejścia dla aplikacji OspMain()
tworzy instancję aplikacji i uruchamia ją
Analogicznie jak w innych platformach
31
Cykl życia aplikacji
OnAppInitializing()
Kiedy wywołane:• Aplikacja jest inicjalizowana po
starcie
Wskazówki dla programistów:• Inicjalizowanie zasobów UI (Formy,
Frame) • Załadowanie zapamiętanego stanu
aplikacji
Fail
32
Cykl życia aplikacji
OnForeground()
Kiedy wywołane:• Aplikacja jest przywrócona z tła
• Poprzednie okno jest ukrywanenp. nadchodzące połączenie, SMS
Wskazówki dla programistów:• Należy załadować zasoby które
zostały wcześniej zwolnione
Fail
33
Cykl życia aplikacji
OnBackground()
Kiedy wywołane:• Inne okno przykrywa aplikację
Wskazówki dla programistów:• Należy zatrzymać przetwarzanie
grafiki i mediów• Zwolnić zbędne zasoby• Zatrzymać zasobożerne operacje
Fail
34
Cykl życia aplikacji
OnAppTerminating()
Kiedy wywołane:• Naciśnięty jest klawisz END• Wywołana jest metoda
Application::Terminate()
• Inna aplikacja jest wywołana gdy jedna już działa
• Brak pamięci albo niski poziom naładowania baterii
Wskazówki dla programistów:• Zapisać stan aplikacji do rejestru• Zwolnić zaalokowane zasoby poza
kontenerami UI (platforma sama zwalnia UI Frame łącznie z kontrolkami potomnymi)
Fail
36
Zarządzanie własnością pamięci
• Jeżeli metoda ma końcówkę „N”, wywołujący musi zwolnić
zwróconą pamięć
• Kontenery UI przejmują własność nad przekazanymi
kontrolkami
Należy pamiętać aby nie zwalniać dwa razy tej samej
pamięci
(kontener zrobi to za nas w trakcie destrukcji)
37
Wyjątki
• bada nie używa wyjątków C++
• Wymaga za dużo zasobów jak dla urządzeń z ich ograniczoną
ilością
• Za duży narzut
• Nie zaleca się stosowania wyjątków w własnych aplikacjach
• Wszystkie sytuacje wyjątkowe są przekazywane przez „wartość”
zwracaną albo zmienną globalną
• E_SUCCESS funkcja się powiodła
• Inne oznaczają błąd
• Obsługa błędów:GetLastResult()
SetLastResult()
GetErrorMessage()
38
Obsługa wyjątków: makro Try
• Naśladuje tradycyjne try-catch w C++
• W przeciwieństwie od makra assert, try nie kończy procesu
TryCatch(condition, cleanup, message)
Kiedy warunek jest false: wykonaj wyrażenie cleanup, wypisz
message i przejdź do CATCH.
TryReturn(condition, value, message)
Kiedy warunek jest false: wypisz message i zwróć value.
TryReturnVoid(condition, message)
Kiedy warunek jest false: wypisz message i nie zwracaj żadnej
wartości.
39
2-fazowa konstrukcja
Unikanie wycieków pamięci: alokacja zasobów jest przeniesiona z konstruktora do metody Construct()
class TwoPhaseClass{public
TwoPhaseClass(void) : p1(null), p2(null) { }~TwoPhaseClass(void) { if (p1) delete p1; if (p2) delete p2; }
result Construct(void) {p1 = new SimpleClass();if (NULL == p1)
return E_OUT_OF_MEMORY;p2 = new SimpleClass(); // Out of memory errorif (NULL == p2)
return E_OUT_OF_MEMORY;}
};
voidMyClass::SomeFunction(){
TwoPhaseClass a; // Calls the constructor that does not throw an exception
// Calls the Construct() method which allocates two SimpleClass objects// Destructor is called because ‘a’ itself is fully constructedresult r = a.Construct();if (r == E_OUT_OF_MEMORY)
…}
1. Object obj; // Alocate memory
2. obj.Construct() //Construct object
40
Debugowanie
• Makro Assert
• Sprawdza warunek i jeżeli nie jest spełniony kończy proces
• Nie jest kompilowany dla releasów
AppAssertion(condition)
AppAssertionf(condition, message)
• Makro Log
• Loguje dowolne wiadomości które mogą być przejrzane
później
• Logowanie do konsoli albo do pliku na telefonie
AppLog(message)
AppLogDebug(message)
AppLogException(message)
42
API udostępniane przez platformę
• Aplikacje są napisane w C/C++
• Jest możliwe używanie natywnych aplikacji np. aparat, dailer
• Udostępniony jest mechanizm używania wyniku działania innych
aplikacji np. zdjęć z aparatu
• Wywołanie akcji określone jest przez ID aplikacji i ID czynności
43
Przestrzeń nazw platformy bada
Namespace Header file Library
Osp::App #include <FApp.h> FApp
Osp::Base #include <FBase.h> FBase
Osp::Commerce::Store #include <FCommerce.h> FCommerce
Osp::Content #include <FContent.h> FContent
…………………….. …………………….. ……………………..
• Konwencja nazewnictwa:• Plik nagłówkowy: F<Namespace>.h
(Jeden główny plik nagłówkowy dla danej przestrzeni nazw)
• Biblioteka: F<Namespace>
• Używanie przestrzeni nazw:
.h .cpp
#include <FBase.h> using namespace Osp::Base;
44
API udostępniane przez platformę
Podstawowe API
Osp::App
Osp::Base
Osp::Io
Osp::Locales
Osp::Net
Osp::Security
Osp::System
Osp::Telephony
Osp::Text
Osp::Xml
API dla interfejsu i multimediów
Osp::Graphics
Osp::Media
Osp::Ui
Osp::Uix
Osp::Web
API zorientowane na usługi
Osp::Commerce
Osp::Content
Osp::Locations
Osp::Messaging
Osp::Social
45
API udostępniane przez platformę
•Podstawowe typy danych
•Kolekcje
•Runtime – wątki, synchronizacja, timery
•Newlib (część)
•C++ STL
•Osp::Base
•Osp::Io
•Osp::Text
•Osp::Locales
•Osp::App
•Osp::Graphics
•Osp::Ui
•Osp::Uix
•Osp::Net
•Osp::Telephony
•Osp::Messaging
•Osp::Media
•Osp::Security
•Osp::Device
•Osp::Social
•Osp::Content
•Osp::Locations
•Osp::Commerce
•Osp::Web
•Osp::Test
46
API udostępniane przez platformę
•Pliki i foldery
•Baza danych (oparte o SQLite)
•Rejestr
•Osp::Base
•Osp::Io
•Osp::Text
•Osp::Locales
•Osp::App
•Osp::Graphics
•Osp::Ui
•Osp::Uix
•Osp::Net
•Osp::Telephony
•Osp::Messaging
•Osp::Media
•Osp::Security
•Osp::Device
•Osp::Social
•Osp::Content
•Osp::Locations
•Osp::Commerce
•Osp::Web
•Osp::Test
47
API udostępniane przez platformę
Konwersja między różnymi typami kodowania
•Osp::Base
•Osp::Io
•Osp::Text
•Osp::Locales
•Osp::App
•Osp::Graphics
•Osp::Ui
•Osp::Uix
•Osp::Net
•Osp::Telephony
•Osp::Messaging
•Osp::Media
•Osp::Security
•Osp::Device
•Osp::Social
•Osp::Content
•Osp::Locations
•Osp::Commerce
•Osp::Web
•Osp::Test
48
API udostępniane przez platformę
• Kod języka
• Data
• Czas
• Waluta
• Etc
•Osp::Base
•Osp::Io
•Osp::Text
•Osp::Locales
•Osp::App
•Osp::Graphics
•Osp::Ui
•Osp::Uix
•Osp::Net
•Osp::Telephony
•Osp::Messaging
•Osp::Media
•Osp::Security
•Osp::Device
•Osp::Social
•Osp::Content
•Osp::Locations
•Osp::Commerce
•Osp::Web
•Osp::Test
49
API udostępniane przez platformę
Przestrzeń nazw dla frameworku
aplikacyjnego
•Osp::Base
•Osp::Io
•Osp::Text
•Osp::Locales
•Osp::App
•Osp::Graphics
•Osp::Ui
•Osp::Uix
•Osp::Net
•Osp::Telephony
•Osp::Messaging
•Osp::Media
•Osp::Security
•Osp::Device
•Osp::Social
•Osp::Content
•Osp::Locations
•Osp::Commerce
•Osp::Web
•Osp::Test
50
API udostępniane przez platformę
•Grafika 2D:
• Czcionki wektorowe
• Bitmapy
• Prymitywy do rysowania
• Bezpośredni zapis i odczyt z bufora
•Grafika 3D:
• OpenGL ES 1.1 i 2.0
• EGL
•Osp::Base
•Osp::Io
•Osp::Text
•Osp::Locales
•Osp::App
•Osp::Graphics
•Osp::Ui
•Osp::Uix
•Osp::Net
•Osp::Telephony
•Osp::Messaging
•Osp::Media
•Osp::Security
•Osp::Device
•Osp::Social
•Osp::Content
•Osp::Locations
•Osp::Commerce
•Osp::Web
•Osp::Test
51
API udostępniane przez platformę
•Kontenery
•Kontrolki - TouchWiz 3.0, FlashLite, Animacje,
Mapy, i kontrolka przeglądarki Web
•XML UI Builder
•Niezależne od rozdzielczości – kontrolki maja
stałe proporcje w różnych rozdzielczościach
•Osp::Base
•Osp::Io
•Osp::Text
•Osp::Locales
•Osp::App
•Osp::Graphics
•Osp::Ui
•Osp::Uix
•Osp::Net
•Osp::Telephony
•Osp::Messaging
•Osp::Media
•Osp::Security
•Osp::Device
•Osp::Social
•Osp::Content
•Osp::Locations
•Osp::Commerce
•Osp::Web
•Osp::Test
52
API udostępniane przez platformę
•Różne czujniki– magnetyczny, akcelerometr,
GPS, itd.
•Programowalne wibracje
(zewnętrzne SDK wymagane do symulacji)
•Ruch
•Detekcja i rozpoznawanie twarzy
•Osp::Base
•Osp::Io
•Osp::Text
•Osp::Locales
•Osp::App
•Osp::Graphics
•Osp::Ui
•Osp::Uix
•Osp::Net
•Osp::Telephony
•Osp::Messaging
•Osp::Media
•Osp::Security
•Osp::Device
•Osp::Social
•Osp::Content
•Osp::Locations
•Osp::Commerce
•Osp::Web
•Osp::Test
53
API udostępniane przez platformę
•Zarządzanie połączeniami – profile połączeń
•Sokety
•HTTP
•Bluetooth
•Wi-Fi
•Osp::Base
•Osp::Io
•Osp::Text
•Osp::Locales
•Osp::App
•Osp::Graphics
•Osp::Ui
•Osp::Uix
•Osp::Net
•Osp::Telephony
•Osp::Messaging
•Osp::Media
•Osp::Security
•Osp::Device
•Osp::Social
•Osp::Content
•Osp::Locations
•Osp::Commerce
•Osp::Web
•Osp::Test
54
API udostępniane przez platformę
•Dzwonienie
•Sieć
•SIM
•Osp::Base
•Osp::Io
•Osp::Text
•Osp::Locales
•Osp::App
•Osp::Graphics
•Osp::Ui
•Osp::Uix
•Osp::Net
•Osp::Telephony
•Osp::Messaging
•Osp::Media
•Osp::Security
•Osp::Device
•Osp::Social
•Osp::Content
•Osp::Locations
•Osp::Commerce
•Osp::Web
•Osp::Test
55
API udostępniane przez platformę
•SMS
•MMS
•Osp::Base
•Osp::Io
•Osp::Text
•Osp::Locales
•Osp::App
•Osp::Graphics
•Osp::Ui
•Osp::Uix
•Osp::Net
•Osp::Telephony
•Osp::Messaging
•Osp::Media
•Osp::Security
•Osp::Device
•Osp::Social
•Osp::Content
•Osp::Locations
•Osp::Commerce
•Osp::Web
•Osp::Test
56
API udostępniane przez platformę
•Odtwarzanie
•Nagrywanie
•Przetwarzanie
•Kamera
•Osp::Base
•Osp::Io
•Osp::Text
•Osp::Locales
•Osp::App
•Osp::Graphics
•Osp::Ui
•Osp::Uix
•Osp::Net
•Osp::Telephony
•Osp::Messaging
•Osp::Media
•Osp::Security
•Osp::Device
•Osp::Social
•Osp::Content
•Osp::Locations
•Osp::Commerce
•Osp::Web
•Osp::Test
57
API udostępniane przez platformę
•Kryptografia i szyfrowanie
•Certyfikaty
•Osp::Base
•Osp::Io
•Osp::Text
•Osp::Locales
•Osp::App
•Osp::Graphics
•Osp::Ui
•Osp::Uix
•Osp::Net
•Osp::Telephony
•Osp::Messaging
•Osp::Media
•Osp::Security
•Osp::Device
•Osp::Social
•Osp::Content
•Osp::Locations
•Osp::Commerce
•Osp::Web
•Osp::Test
58
API udostępniane przez platformę
•Synchronizacja i zarządzanie telefonem
•Synchronizacja danych między urządzeniami
•Zarządzanie telefonem zgodne z standardem
OMA DM
•Osp::Base
•Osp::Io
•Osp::Text
•Osp::Locales
•Osp::App
•Osp::Graphics
•Osp::Ui
•Osp::Uix
•Osp::Net
•Osp::Telephony
•Osp::Messaging
•Osp::Media
•Osp::Security
•Osp::Device
•Osp::Social
•Osp::Content
•Osp::Locations
•Osp::Commerce
•Osp::Web
•Osp::Test
59
API udostępniane przez platformę
• Książka adresowa
• Kalendarz
• Synchronizacja danych
• Bramka SNS
•SNS gateway - Twitter, Facebook, MySpace
•Osp::Base
•Osp::Io
•Osp::Text
•Osp::Locales
•Osp::App
•Osp::Graphics
•Osp::Ui
•Osp::Uix
•Osp::Net
•Osp::Telephony
•Osp::Messaging
•Osp::Media
•Osp::Security
•Osp::Device
•Osp::Social
•Osp::Content
•Osp::Locations
•Osp::Commerce
•Osp::Web
•Osp::Test
60
API udostępniane przez platformę
•Lokalne i zdalne zarządzanie i wyszukiwanie
treści
•Tagowanie, metadane, wsparcie dla informacji
kontekstowych
•Osp::Base
•Osp::Io
•Osp::Text
•Osp::Locales
•Osp::App
•Osp::Graphics
•Osp::Ui
•Osp::Uix
•Osp::Net
•Osp::Telephony
•Osp::Messaging
•Osp::Media
•Osp::Security
•Osp::Device
•Osp::Social
•Osp::Content
•Osp::Locations
•Osp::Commerce
•Osp::Web
•Osp::Test
61
API udostępniane przez platformę
•Lokalizacja - GPS i WPS
•Zarządzanie punktami orientacyjnymi
•Kontrolka dla mapy
•Osp::Base
•Osp::Io
•Osp::Text
•Osp::Locales
•Osp::App
•Osp::Graphics
•Osp::Ui
•Osp::Uix
•Osp::Net
•Osp::Telephony
•Osp::Messaging
•Osp::Media
•Osp::Security
•Osp::Device
•Osp::Social
•Osp::Content
•Osp::Locations
•Osp::Commerce
•Osp::Web
•Osp::Test
62
API udostępniane przez platformę
•Obsługa komercyjnych usług dla Samsung
Application Store
•Wyszukiwanie i zakupy
•Osp::Base
•Osp::Io
•Osp::Text
•Osp::Locales
•Osp::App
•Osp::Graphics
•Osp::Ui
•Osp::Uix
•Osp::Net
•Osp::Telephony
•Osp::Messaging
•Osp::Media
•Osp::Security
•Osp::Device
•Osp::Social
•Osp::Content
•Osp::Locations
•Osp::Commerce
•Osp::Web
•Osp::Test
63
API udostępniane przez platformę
•Kontrolka przeglądarki internetowej
•Funkcja pobierania
•Wsparcie dla JavaScriptu
•Osp::Base
•Osp::Io
•Osp::Text
•Osp::Locales
•Osp::App
•Osp::Graphics
•Osp::Ui
•Osp::Uix
•Osp::Net
•Osp::Telephony
•Osp::Messaging
•Osp::Media
•Osp::Security
•Osp::Device
•Osp::Social
•Osp::Content
•Osp::Locations
•Osp::Commerce
•Osp::Web
•Osp::Test
64
API udostępniane przez platformę
•Przestrzeń nazw do testów jednostkowych
•Możliwość tworzenia testów jednostkowych i
stres testów
•Statystyka pokrycia testów
•Wsparcie IDE dla tworzenia testów dla
istniejących aplikacji
•Osp::Base
•Osp::Io
•Osp::Text
•Osp::Locales
•Osp::App
•Osp::Graphics
•Osp::Ui
•Osp::Uix
•Osp::Net
•Osp::Telephony
•Osp::Messaging
•Osp::Media
•Osp::Security
•Osp::Device
•Osp::Social
•Osp::Content
•Osp::Locations
•Osp::Commerce
•Osp::Web
•Osp::Test
65
Pytania?
Przydatne strony:
http://www.bada.comhttp://developer.bada.comhttp://www.samsungapps.com/
67
Punkt wejścia
int OspMain(int argc, char *pArgv[])
{
result r = E_SUCCESS;
AppLog("Application started.");
ArrayList* pArgs = new ArrayList();
pArgs->Construct();
for (int i = 0; i < argc; i++)
pArgs->Add(*(new String(pArgv[i])));
r = Osp::App::Application::Execute(MetalDetector::CreateInstance,
pArgs);
if (IsFailed(r))
{
AppLogException("Application execution failed-[%s].",
GetErrorMessage(r));
r &= 0x0000FFFF;
}
pArgs->RemoveAll(true);
delete pArgs;
AppLog("Application finished.");
return static_cast<int>(r);
}
68
Tworzenie UI – obsługa i wysyłanie zdarzeń
bool MetalDetector::OnAppInitializing(AppRegistry& appRegistry)
{
FormMgr *pFormMgr = new FormMgr();
pFormMgr->Initialize();
GetAppFrame()->GetFrame()->AddControl(*pFormMgr);
pFormMgr->SendUserEvent(FormMgr::REQUEST_MAINFORM, null);
return true;
}
...
class FormMgr :
public Osp::Ui::Controls::Form
...
public:
static const RequestId REQUEST_MAINFORM = 100;
static const RequestId REQUEST_DETECTFORM = 101;
...
69
Tworzenie UI – obsługa i wysyłanie zdarzeń
void FormMgr::OnUserEventReceivedN(RequestId requestId,
Osp::Base::Collection::IList* pArgs)
{
Frame *pFrame = Application::GetInstance()->GetAppFrame()->GetFrame();
switch(requestId)
{
case REQUEST_MAINFORM:
{
MainForm *pMainForm = new MainForm();
pMainForm->Initialize();
pFrame->AddControl(*pMainForm);
pFrame->SetCurrentForm(*pMainForm);
pFrame->RequestRedraw();
if (null != __pPreviousForm)
pFrame->RemoveControl(*__pPreviousForm);
__pPreviousForm = pMainForm;
}
break;
case REQUEST_DETECTFORM:
{
...
Same as above
...
}
break;
default:
break;
}
}
70
Tworzenie UI
class MainForm :
public Osp::Ui::Controls::Form
....
bool MainForm::Initialize()
{
//Instead of style ID of designed form in UI designer could be used
Form::Construct(FORM_STYLE_NORMAL|FORM_STYLE_TITLE|FORM_STYLE_INDICATOR);
SetName(L"MainForm");
SetTitleText(L"MetalDetector");
return true;
}
71
Dodawanie kontrolek
class MainForm :
public Osp::Ui::IActionEventListener,
...
{
...
protected:
static const int IDC_BTN_START = 101;
...
}
result MainForm::OnInitializing(void)
{
result r = E_SUCCESS;
// Create a Button
Button *pBtnStart = new Button();
pBtnStart->Construct(Rectangle(140,500,200,100));
pBtnStart->SetText(L"Start");
pBtnStart->SetActionId(IDC_BTN_START);
pBtnStart->AddActionEventListener(*this);
AddControl(*pBtnStart);
return r;
}
72
Obsługa zdarzeń z kontrolek
class MainForm :
public Osp::Ui::IActionEventListener,
void MainForm::OnActionPerformed(const Osp::Ui::Control& source,
int actionId)
{
// Get the frame pointer
Frame *pFrame = Application::GetInstance()->GetAppFrame()->GetFrame();
switch(actionId)
{
case IDC_BTN_START:
{
FormMgr* pFormMgr = static_cast<FormMgr *>(pFrame-
>GetControl("FormMgr"));
if(pFormMgr != null)
pFormMgr->SendUserEvent(FormMgr::REQUEST_DETECTFORM, null);
}
break;
default:
break;
}
}
73
Obsługa czujników
class DetectForm :
...
public Osp::Uix::ISensorEventListener
bool DetectForm::RegisterSensor()
{
result r = E_SUCCESS;
r = __sensorMgr.Construct();//Osp::Uix::SensorManager __sensorMgr;
...
return __StartSensor();
}
bool
DetectForm::__StartSensor()
{
...
r = __sensorMgr.GetMinInterval(SENSOR_TYPE_MAGNETIC, interval);
...
r = __sensorMgr.AddSensorListener(*this, SENSOR_TYPE_MAGNETIC, interval,
false);
...
}
74
Obsługa czujników
void DetectForm::OnDataReceived(SensorType sensorType, SensorData&
sensorData, result r)
{
float x=0 ,y=0 ,z=0;
AppLog("DataReceived: Get Magnetic Sensor Data");
sensorData.GetValue((SensorDataKey)MAGNETIC_DATA_KEY_X, x);
sensorData.GetValue((SensorDataKey)MAGNETIC_DATA_KEY_Y, y);
sensorData.GetValue((SensorDataKey)MAGNETIC_DATA_KEY_Z, z);
...
}
75
Używanie timerów
class DetectForm :
public Osp::Base::Runtime::ITimerEventListener,
...
bool DetectForm::InitTimer()
{
result r = E_SUCCESS;
__pTimer = new Timer;
r = __pTimer->Construct(*this);
...
__StartTimer(__timerInterval);
return true;
}
void DetectForm::__StartTimer(int interval)
{
__pTimer->Start(interval);
}
void DetectForm::__StopTimer()
{
__pTimer->Cancel();
}
void DetectForm::OnTimerExpired(Timer& timer)
{
if(__timerInterval != 0)
Draw();
}
76
Korzystanie z systemu plików
result DetectForm::__GetFileList(String folder)
{
String dirName(__dirBase);//__dirBase.Append(String(L"/Res/"))
Directory* pDir = new Directory();
if(pDir->Construct(__dirBase)!=E_SUCCESS)
return E_IO;
DirEnumerator* pDirEnum = pDir->ReadN();
r = pDirEnum->MoveNext();
...
DirEntry dirEntry = pDirEnum->GetCurrentDirEntry();
__AddElementInFileList(dirEntry, r);
...
}
result DetectForm::__AddElementInFileList(DirEntry &DirEntry, result r)
{
...
String* fileName = new String(DirEntry.GetName());
...
}
77
Rysowanie przy użyciu canvas
result DetectForm::OnDraw()
{
...
__pCanvas = GetCanvasN();
...
__pCanvas->SetBackgroundColor(Color::COLOR_BLACK);
__pCanvas->Clear();
...
String* nextImageName = (String*)__fileList.GetAt(__fileIndex);
pBmp = __pImage->DecodeN(*nextImageName, BITMAP_PIXEL_FORMAT_ARGB8888);
...
__pCanvas->DrawBitmap(Point(drawX, rect.y+10), *pBmp);
...
Font font;
font.Construct(FONT_STYLE_PLAIN, 30);
__pCanvas->SetFont(font);
...
__pCanvas->DrawArc(Rectangle(drawX, 500, 200, 200), 0, result,
ARC_STYLE_FILLED_PIE );
...
__pCanvas->DrawText(Point(120, 400), msg);
__pCanvas->Show();
...
}
78
Dodawanie bibliotek
• Ważne jest aby dodać do ustawień linkera potrzebne biblioteki
Należy
podać
nazwę
biblioteki
Recommended