79
1 Janusz Lisiecki Samsung Electronics Poland Jarosław Marek

Janusz Lisiecki - studia.elka.pw.edu.plstudia.elka.pw.edu.pl/pub/17Z/WPAM.A/z2-BadaOverview.pdf · •Jak działają aplikacje na platformie bada ... • Warto pisać aplikacje z

  • Upload
    lammien

  • View
    216

  • Download
    0

Embed Size (px)

Citation preview

1

Janusz Lisiecki

Samsung Electronics Poland

Jarosław Marek

2

Janusz Lisiecki [email protected]

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

4

Czym jest bada?

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

11

SHP a bada

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

14

Tworzenie aplikacji na platformie bada

15

Tworzenie aplikacji na platformie bada

http://developer.bada.com

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

20

SDK & IDE

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

28

Jak działają aplikacje na platformie bada

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

35

Praktyka kodowania na platformie bada

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)

41

API udostępniane przez platformę

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

•Email

•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/

66

Przykładowa aplikacja

Metal detector*

* Aplikacja dostarczana z Bada SDK

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

79

Prezentacja dema z symulacją zdarzeń

Metal detector