Nokia New Asha Platform Developer Training

Preview:

DESCRIPTION

In-depth look at the new opportunities and APIs of the Nokia Asha SDK, which enables you to develop apps for the latest phones like the Nokia Asha 501. The training materials includes a quick overview of the refreshed UX, UI development and iconography, internationalization, phone / network / SIM state detection, file selections, notifications, radio tuner, maps, gestures and porting between different touch and non-touch devices. The developer training was held by Mopius in Budapest on May 14th and was the world's first on-site training for the new Asha platform, just a few days after the platform's release.

Citation preview

New Nokia Asha Platform Developer Training Create Amazing Apps for

Nokia Asha Phones

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 1

Andreas Jakl Twitter: @mopius

Trainer & app developer – mopius.com

– nfcinteractor.com

Nokia: Technology Wizard

University of Hagenberg: Assistant Professor

Siemens / BenQ Mobile

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 2

Platforms

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 3

Developer Platform 2.0 DP 1.1 DP 1.0 6th Ed., FP1 6th Ed. 6th Ed., Lite 5th Ed., FP1 Nokia Asha Software

Platform 1.0 Series 40

Nokia Asha Platform

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 4

Asha 501

Series 40 Full Touch

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 5

Asha 305 Asha 306 Asha 308 Asha 309 Asha 310 Asha 311

2 Mb 2 Mb 2 Mb Asha 305, 306 Asha 308, 309, 310 Asha 311

2 Mb 2 Mb 4 Mb

-- -- 1 GHz

Capacitive Multipoint-Touch

Resistive Multipoint-Touch (2)

Capacitive Multipoint-Touch (5)

Jar Size

Java Heap

CPU

Screen

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 6

5 Mb* Asha 501

3 Mb

--

Capacitive Multipoint-Touch (3)

* recommended

What’s New? Nokia IDE for Java ME v2

App Framework – Internationalization API (JSR-238)

– MIDlet lifecycle: startApp() / pauseApp() are called when sent to background

UI and graphics – Image scaling API

– Gesture API: new double tap

– Category bar: additional use as toolbar for actions

Networking – Network State API: SIM, network, WLAN change notifications

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 7

What’s New? Multimedia

– Tuner, image encoding, image postprocessing

– Removed com.nokia.mid.sound.Sound (Nokia UI)

Security – PKI support.

– Removed APDU / SATSA-APDU

Data Handling – Contacts API: contact change notifications in phonebook (while MIDlet is active)

– File Select API: use native file browser to select files

– Phone Setting API: retrieve settings + change notifications: flight mode, data connection, silent mode, etc.

– Nokia Notifications API: subscribe + get payload of notifications

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 8

DEVELOPMENT Java ME

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 9

Development

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 10

Both free IDEs come with

extensive, generic Java ME support

on board.

Nokia IDE for Java ME

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 11

Device SDK Manager

Integrated SDK + Toolchain

App Templates

JAD Editor

NetBeans Fully integrated solution

– Integrates all aspects of mobile development

– Visual UI Designer

– Game Builder

– Localization, Preprocessing

– Web access

– Automated deployment

Maintained by Oracle – http://www.netbeans.org/

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 12

Installation Java JDK + JRE 7

– Update 17 (Later versions do not work – emulator: internal RMI registry port issues)

– 32 bit version (also on 64 bit OS)

– http://www.oracle.com/technetwork/java/javase/downloads/index.html

Nokia Asha SDK (includes Nokia IDE) – https://www.developer.nokia.com/Develop/Java/Tools/

Optional: NetBeans 7 (All Edition!) – http://netbeans.org/

Optional: Oracle Java ME SDK – http://www.oracle.com/technetwork/java/javame/javamobile/download/sdk/index.html

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 13

!

NetBeans 7.3+ NetBeans 7.x experience

– Don’t choose Features on Demand

– Install Java SE + EE + ME

Run NetBeans as Administrator once after Nokia SDK installation

– Integrates SDK docs

Install additional plug-ins – Java ME SDK Tools

– LWUIT Resource Editor

– Java ME SDK Demos

– Visual Mobile Designer

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 14

PHONES & APIS Understanding the Slang

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 15

Asha / Series 40 Phones

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 16

Filter by Series 40 Edition or Java Runtime version (new phones)

developer.nokia.com/Devices

What does my phone support?

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 17

www.developer.nokia.com/Devices/

Versions

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 18

Asha Software Platform

Developer Platform

OS Version Phones

1.0 Asha Software Platform Asha 501

2.0.0 Series 40 Asha 305, 306, 308, 309, 310, 311

1.1.0 Series 40 Asha 200, 201, 302, 303

1.0.0 Series 40 Asha 202, 203; 301, C2-00, C2-02, C2-03, C2-05, C2-06, X2-02, X2-05

Series 40 6th Edition, FP 1 Asha 300, C3-01, X3-02

Series 40 6th Edition C2-01, C3-00, X2-00, X2-01, 6303i, 7230, 6350, 6750, 3720, ...

Series 40 6th Edition Lite C1-01, C1-02

Series 40 5th Edition, FP1 2690, 3208, 6600i, 2730, 2700, 6208, 6600, 8800, ...

Series 40 5th Edition, FP1 Lite 2220, 2720, 2320, 2330, 5000...

Series 40 5th Edition 3610, 6263, 6555, 7500, 6267

CLDC MIDP 248 MSA

185 JTWI

75 File

82 BT

135 Medi

a

172 Web RPC

172 Web XML

177 SATSAAPD

U

177 SATSACRY

PT

179 Locat

ion

184 3D

205 Messaging

211 Content

226 SVG

234 Came

ra

234 Audio

3D

234 Music

234 ImageE/P

234 Tune

r

238 I18N

256 Sens

or

Nokia UI

IAP

Asha 1.0

1.1 2.1 - - 1.0 1.1 1.2 1.0 1.0 - 1.0 1.0.1 1.1 2.0 1.0.1 1.1 1.1 - - 1.1 1.1 1.6 1.2 1.7 beta

2.0.0 1.1 - 1.0 1.0 1.0 1.1 1.1 - - - 1.6 2.0

1.1.0 - - - - - 1.1 1.0

1.0.0 - - - - - 1.1b -

S40 6th, FP1

- - - - - 1.1b -

S40 6th

- √ - - - - 1.1 -

S40 6th Lite

- √ - - - - - - - - - -

S40 5th FP1

√ - 1.1 - √ - 1.0 1.0 - - - - -

S40 5th

FP1 L

- √ - - - - - - - - - - - - - - -

S40 5th

- 1.1 1.0 1.0 - 1.1 - √ - 1.0 1.0 - - - - -

SDKs

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 21

www.developer.nokia.com/Develop/Java/Tools/Series_40_platform_SDKs/

1 emulator per SDK. Install multiple SDKs for

more emulators.

www.developer.nokia.com/Develop/asha/java/downloads.xhtml

Phone Deployment No Nokia Suite support for Asha 501 yet – Over-the-air (OTA)

– Copy to MicroSD in Mass Storage mode

– Bluetooth:

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 22

USER INTERFACE - ESSENTIALS Nokia Asha

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 23

UX Guidelines

Design

– Layouts

– Interaction patterns

– Icon templates

– developer.nokia.com/Design/

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 24

New Asha UX

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 25

Hardware Keys

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 26

Back Button

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 27

User Interface Layout

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 28

Screen Sizes

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 29

Touch-and-type Full touch Nokia Asha

Minimum Touch Area

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 30

59 x 59 px 55 x 55 px 47 x 47 px

Finger

Thumb

UI Comparison

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 31

Status bar

Header bar

Action button 1

Content area

Navigation bar

Back button Category bar

View title

Action button 2 (options)

Status bar

Header bar

Content area

Toolbar

240 x 400 px 3:5 aspect ratio 240 x 320 px

3:4 aspect ratio

USER INTERFACES Developing

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 32

UI Strategies

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 33

Custom UI on Canvas LCDUI High-Level UI LWUIT Library

High Level UI

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 34

Display

Canvas Screen

TextBox Form List Alert

ChoiceGroup

DateField

TextField Gauge

ImageItem

StringItem Choice (Interface)

Item Spacer CustomItem

Command

Ticker Graphics

Displayable

Low Level UI Draw the GUI yourself, own event handling. Used for games

and bigger commercial applications.

Completely pre-defined screen layouts

High Level UI Appearance based on default phone UI

design, can not be influenced.

Arrange predefined controls on a screen.

LWUIT UI Library draws UI directly using low level UI

drawing methods.

High Level UI

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 35

Display

Canvas Screen

TextBox Form List Alert

ChoiceGroup

DateField

TextField Gauge

ImageItem

StringItem Choice (Interface)

One Display instance / MIDlet

Methods for drawing to a

canvas

Available in all sub-classes of

Displayable

Item Spacer CustomItem

Command

Ticker Graphics

Displayable LWUIT

High Level UI: Forms

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 36

Individual items, automatically arranged below each other. The

appearance depends on the phone.

WTK Emulator Nokia 7710 Emulator

LWUIT LightWeight User Interface Toolkit

– Inspired by Swing

– But designed for constrained devices

– Can be added to any Java ME application (embedded .jar)

– Drawing done in Java source code, without native peer rendering

Optimized version for Nokia!

Features (excerpt): – Layouts

– Themes, fonts

– Animations & Transitions

– 3D / SVG integration (optional)

– Internationalization

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 37

Tantalum Mobile Toolset Many common use cases

– HTTP Getters

– JSON, XML

– Worker Threads

– Logging

Licensing – Free; Apache License

– Add source directly to your project

projects.developer.nokia.com/Tantalum

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 38

Remote Device Access Enabling testing on real devices

Free for Nokia Developer users

Go to RDA: http://www.developer.nokia.com/Devices/Remote_device_access/

Watch introductory video: http://www.developer.nokia.com/Develop/Java/Videos/

http://www.youtube.com/watch?v=F1odix8k_fg

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 41

Code Examples Installed to:

– C:\Nokia\Examples\Nokia_Asha_SDK_1_0

Nokia IDE – Nokia Hub → Nokia Series 40

Code Examples

Emulator / Help – Help → MIDlet Samples

Online – bit.ly/JavaMeExamples

Maps & LWUIT – C:\Nokia\Devices\Nokia_Asha_SDK_1_0\plugins

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 42

CATEGORY BAR & BACK Tabs & Tools

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 43

Java ME Commands Command = semantic information about an action (→ how can an action be executed?)

But no actual implementation of the action!

Contains: – Short label

– Long label (optional)

– Type

– Priority

Nokia Asha Training | Andreas Jakl, Mopius 44

One of them will be displayed on the screen / in the menu, depending on the available space

“Intention” of the command – e.g. for special placement on the device: Ok, Back, Help, Screen, Item, etc.

For the order of commands, if more are mapped to the same softkey. The lower the priority, the more important it is.

18.03.2013

Category Bar & Commands

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 45

No Category Bar Primary action as button

Other commands in menu

Category Bar: Tab Bar ≤ 4 tabs

Primary action added to menu

Category Bar: Toolbar New in Asha Platform:

items don’t stay selected

Full Touch Category Bar Automatic back button.

≤ 15 tabs, no actions allowed Primary action as icon (top right)

Other actions in menu (top left)

Do Not Combine Tabs & Actions

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 46

Tab Bar Highlights current tab.

Category bar should disappear when drilling

down.

Toolbar Highlight only on touch down (3).

Affect entire view, not a single item within view.

CategoryBar Icons

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 47

New Asha Full Touch

Bounding Box 22 x 22 px 36 x 36 px

Icon Size 20 x 18 px 20 x 20 px

Color Gray White

Ready-made icons in Nokia Icon Toolkit

http://bit.ly/NokiaIcons

IconCommand Extends LCDUI Command class

– Adds: Icon • Built-in system icon

• Own icon

– unselected

– [selected – if not specified: automatic color highlight]

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 48

IconCommand

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 49

public class JavaFTMidlet extends MIDlet implements CommandListener, ElementListener { private IconCommand cmdOk; private IconCommand cmdHome; public JavaFTMidlet() { // Create icon command with pre-defined image cmdOk = new IconCommand("Ok", Command.OK, 1, IconCommand.ICON_OK); // Create icon command with custom image try { Image imgHome = Image.createImage("/categorybar_home_m_light.png"); cmdHome = new IconCommand("Home", imgHome, null, Command.SCREEN, 3); } catch (IOException ex) { } } }

Commands in Displayable Commands in CategoryBar

CategoryBar

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 50

// Add commands to the category bar IconCommand[] iconCommands = {cmdHome, cmdInfo, cmdLike}; CategoryBar categoryBar = new CategoryBar(iconCommands, true); // Tabs CategoryBar categoryBar = new CategoryBar(iconCommands, true, CategoryBar.ELEMENT_MODE_RELEASE_SELECTED); // Actions categoryBar.setVisibility(true); // Invisible by default categoryBar.setElementListener(this);

public void notifyElementSelected(CategoryBar cb, int i) { // From the ElementListener interface // Commands coming from the Category Bar Alert alert = new Alert("CategoryBar"); if (i == ElementListener.BACK) { alert.setString("Back element"); // i == -1 } else { alert.setString("Element: " + i); } display.setCurrent(alert); }

Example: JavaTouch ei

ther

/or

Back on Platforms

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 51

Back Stepping Historical navigation flow

Skipped elements – Options / context menus

– Dialogs

– Notification Panel

– Pickers

Long-press closes current app

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 52

Back Behaviour HW back key – must have – App main level: exit app

– App sub level: back to upper hierarchy level • Exception: within game – open pause menu

No SW back button allowed – Exception: game – SW button same

behaviour as HW back key

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 53

Back Commands Type “BACK” command: mapped to HW key

– Not visible on screen

CategoryBar: automatic back command

– Invisible on Asha Platform → mapped to HW key

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 54

cmdBack = new IconCommand("Back", Command.BACK, 3, IconCommand.ICON_BACK); frmMain.addCommand(cmdHelp);

HW Key → Back Commands

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 55

No back command, no category bar:

Default system dialog to close the app.

Category bar in use (also w/o own back command): Callback to CategoryBar listener

with “back” code (-1).

Traditional back command added:

Not visible on screen, executed via HW key.

Exiting the App 3 options

– Long-press on back HW button

– Swiping out app

– Manually within app

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 56

public void exit() { destroyApp(true); notifyDestroyed(); }

ICONOGRAPHY Activity Screen & Launcher Icon

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 57

Icon File PNG Format – 50 x 50 px square image

– Gradient background

Display – Full square form on

activity screen

– Auto-cut to surround shape for launcher icon

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 58

Icon Toolkit Templates for icons

– Photoshop

– Illustrator

– Inkscape (open source)

Pre-defined background colors

bit.ly/NokiaIcons

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 59

Icons

Assign icon

– Nokia IDE: JAD editor

– NetBeans: project

properties

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 60

Colors Free to choose – Fit to own brand

Pre-defined Nokia colors – Used as categories for

system apps

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 61

www.developer.nokia.com/Resources/Library/Asha_UI/#!style/colour.html

LWUIT Customized User Interface

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 62

LWUIT Stylable UI Components

– From Oracle: lwuit.java.net

Optimized for Nokia – Native look & feel

– Uses Nokia APIs for functionality

– Better performance

– Integrated in Nokia Asha SDK • Online: projects.developer.nokia.com/LWUIT_for_Series_40

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 63

What is LWUIT? Lightweight UI Toolkit – Widget library inspired by Swing but designed for constrained

devices such as mobile phones and set-top boxes

UI Library – Easily customizable UI components: lists, table, calendar, button, etc.

Themes: customizable look & feel

Transitions, animations, layout management

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 64

LWUIT Example Apps projects.developer.nokia.com/LWUIT_for_Series_40/wiki/ExampleApplications

– LWUIT Rlinks (Reddit)

– LWUIT Slide Puzzle

– LWUIT Tourist Attractions

– LWUIT CategoryBar Demo

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 65

INTERNATIONALIZATION JSR-238

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 66

Internationalization

JSR-238

– Format data for locales

– Locale-aware string comparison

– Translation: manage app & device resources

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 67

Formatter Locale-specific data

– dates, times, numbers, percentages, currency

Generic message formatting – placeholders {n} / {nn}

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 68

Asha Emulator Supported locales

en kn-IN

ta ur

// Text definitions String txtCurrency = "Currency: {0}"; // [...] String txtTime = "Time: {0}"; // No parameter -> would use current locale (microedition.locale) Formatter format = new Formatter("kn-IN"); frmMain.append(Formatter.formatMessage(txtCurrency, new String[] {format.formatCurrency(currency)})); frmMain.append(Formatter.formatMessage(txtTime, new String[] {format.formatDateTime(dateTime, Formatter.TIME_LONG)}));

Example: InternationalDemo

String Comparator Locale-aware string comparison – Levels to adapt sorting

order based on needs

– JSR238: level 1 – 3 & identical

– Default: level 1

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 69

String Comparison

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 70

Asha Emulator Supported locales

en en-US en-GB

he he-IL

sk sk-SK

cs cs-CZ

es es-ES

zh zh-CN

ja ja-JP

Test code

Test results

StringComparator strCmpEn1 = new StringComparator("en", StringComparator.LEVEL1); int result = strCmpEn1.compare("a", "A");

English Level 1 Level 2 Level 3 Identical

a – a 0 0 0 0

a – A 0 0 -5 -5

a – ä 0 -14 -14 -14 0 ... both texts are considered identical

Example: InternationalDemo

Translation ResourceManager – Assets (strings, images, etc.) in resource files

– Different .res files for locales

– Hierarchial matching • Avoid duplication of common resources

• Automatic matching, removes: variant → country → language component

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 71

Tools Localization support in Nokia IDE / NetBeans

– *Not* JSR 238

– Custom class: works on any device

Asha SDK Help – ResourceMaker cmd tool

– Not up-to-date

WTK 2.5 – Editor tool

– Old WTK version (current: 3.2)

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 72

IDEs create custom classes, don’t use JSR-

238

SETTINGS & NETWORK STATE API Adapting to the Phone State

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 73

Phone Settings Current state & change listener subscriptions – Flight mode

– Data connection

– Background data connection

– Roaming data connection

– Vibrator mode

– Silent mode

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 74

Setting Detection

Retrieve setting

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 75

int settingState = Setting.getSetting(Setting.SETTING_FLIGHT_MODE);

ON OFF INVALID DENY ASK ACCEPT WIFIONLY

SETTING_FLIGHT_MODE SETTING_DATA_CONNECTION SETTING_BACKGROUND_DATA_CONNECTION SETTING_ROAMING_DATA_CONNECTION SETTING_VIBRATOR SETTING_SILENT

Example: PhoneSettings

State changes available via listener

Network State

Monitor state of

– Network (home / roaming)

– SIM

– WLAN

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 76

Network State Detection

Retrieve status for SIM card

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 77

Example: PhoneSettings

int networkState = NetworkState.getState(simCard);

NETWORK_STATE_NO_NETWORK NETWORK_STATE_HOME NETWORK_STATE_ROAMING

0 1

State changes available via listener

SIM State Detection

Retrieve status for SIM card

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 78

Example: PhoneSettings

int simState = SIMState.getState(simCard);

SIM_STATE_READY SIM_STATE_NOT_READY SIM_STATE_NO_SIM

0 1

State changes available via listener

Network State Detection

Retrieve status for WLAN

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 79

Example: PhoneSettings

int wlanState = WLANState.getState(simCard);

WLAN_STATE_CONNECTED WLAN_STATE_NOT_CONNECTED

State changes available via listener

FILE SELECTION Native file browser UI

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 80

File Selection Native file browser UI to list + select files

– Images & documents for viewing / editing

– Files for uploading to web service & as message attachments

– Audio or video clips for playback

Blocks calling thread – Don’t use in event handling thread

(e.g., command action)

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 81

SDK Example: FileSelectExample

Launch File Dialog

Launch file selection (in own thread)

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 82

Example: SimpleFileSelect

// Launch file selection dialog FileSelectDetail[] arrSelectedFiles = FileSelect.launch( FileSelect.FILE_SYSTEM_ALL, FileSelect.MEDIA_TYPE_ALL, false);

FILE_SYSTEM_ALL FILE_SYSTEM_EXTERNAL FILE_SYSTEM_INTERNAL … or specific start folder, e.g., System.getProperty("fileconn.dir.photos")

MEDIA_TYPE_ALL MEDIA_TYPE_APPLICATION MEDIA_TYPE_AUDIO MEDIA_TYPE_PICTURE MEDIA_TYPE_VIDEO

false: single-file true: multi-file

File Selection Results

Print metadata of selected file(s)

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 83

if (arrSelectedFiles != null) { // Show file meta data on the screen for (int i = 0; i < arrSelectedFiles.length; i++) { // Display name = file name frmMain.append("Display name: " + arrSelectedFiles[i].displayName); // MIME type, e.g., video/mp4 or image/png frmMain.append("MIME type: " + arrSelectedFiles[i].mimeType); // Size of the selected file in bytes frmMain.append("Size: " + arrSelectedFiles[i].size); // Full path to the file frmMain.append("URL: " + arrSelectedFiles[i].url); } }

Example: SimpleFileSelect

NOTIFICATIONS Push

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 84

Notification API Push messages to user’s phones – Also when app is not

running • Notification banner

• Caches up to 5 messages per app (for up to 14 days)

– Payload ≤ 1.5 kB

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 85

SDK Example: NNAClientExample

Notifications – Sign Up Register new service ID

– Creates service secret

– https://account.nnapi.ovi.com/cm/Web/services.jsp

Environments – Sandbox for testing

– Production available after 5 days • Separate server for China

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 86

Notifications Flow – Client

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 87

Do you want to receive service X

related push notifications?

App needs to ask user for consent

App registers with online push

service

App retrieves client-specific notification ID, sends to own

notifications web service

1 2

Your own custom web service, manages notification

IDs from subscribed clients

Notifications Flow – Push

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 88

User gets push notification

Notification bar shows details

4

3 Sandbox testing in Developer Console: push messages without need for own web service

Notifications Flow – Retrieve

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 89

User launches app (e.g., through

notification bar). App registers

online.

App gets cached push notifications.

Note: user can turn off

notifications for apps.

EnvironmentSelector

App for device / emulator

– Swich between push servers

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 90

C:\Nokia\Examples\Nokia_Asha_SDK_1_0\NNAClientExample\EnvironmentSelector

Client Implementation Open session

– 1 session / app

– Keep open for lifetime of app

Register app

– Callback: stateChanged(NotificationState.STATE_ONLINE)

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 91

NotificationSession session = NotificationSessionFactory.openSession( main, // The MIDlet instance "example.com", // Service ID (Deprecated, but still has to be provided) "com.example", // Application ID this); // NotificationSessionListener

session.registerApplication();

Developer Console

Client Implementation Get Notification ID for this phone

– Callback: infoReceived(NotificationInfo info) – Send this to your web service

Receive messages

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 92

session.getNotificationInformation();

public void messageReceived(NotificationMessage message) { // Get data as string String msgData = message.getPayload().getData(); }

Push Messages Messages

– App running? • No info banner, directly delivered

– Not running? • ≤ 5 messages cached

• Customizable: info banner, alert

Delivery confirmations – Not part of Nokia service

– Own app can contact own web service

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 94

Message Properties

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 95

Checked: delivered also when app is NOT running

Checked: user is alerted about new message

Notification title shown to the user

Not used / shown / accessible

MIME type of payload. Default: application/octet-stream

Not used. App icon shown instead

Maximum cache lifetime (≤ 14 days)

Raw payload to send to the app

Notification ID of the client to push to

RADIO TUNER

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 96

Tuner AM / FM radio

– Tuning

– Seeking

– Squelch

– Stereo mode

– Signal strength query

– Presets

No RDS support

Advanced Multimedia Supplements (JSR-234)

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 97

SDK Example: AMMSTuner

Seek Radio Channels Initialize radio

Start playing

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 98

Example: Radio

// Create generic Java ME player, with the specific radio URL player = Manager.createPlayer("capture://radio"); // Construct player player.realize(); // Get controller to control radio (seeking, specifying properties, etc.) tuner = (TunerControl) player.getControl("javax.microedition.amms.control.tuner.TunerControl");

// Minimum frequency in FM band to start search curFrequency = tuner.getMinFreq(TunerControl.MODULATION_FM); // Start playing player.start(); // Start search for the first station curFrequency = tuner.seek(curFrequency, TunerControl.MODULATION_FM, true);

GESTURES Touchscreen Interaction

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 99

Touch Gestures Use in: Canvas-/CustomItem-based classes

– Optional: combine with Frame Animator API (kinetic scrolling)

Available since Touch & Type – Tap: touch + release

– Double Tap: touch + release + touch + release (new in Asha Platform)

– Long Press (& repeated): touch + hold

– Drag: touch + drag

– Drop: touch + drag + touch down (“stop”) + release

– Flick: touch + drag + release while dragging

– Pinch: 2x touch + 2x drag + 2x touch down (“stop”) + 2x release (new in Full Touch)

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 100

Gesture Components

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 101

App

Java Runtime

GestureAction

Registers Registers

Gesture Listener

Gesture Interactive

Zone

Gesture Registration

Manager

Gestures – Step 1

Create a GestureInteractiveZone

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 102

// Create a GestureInteractiveZone for all Gesture Types GestureInteractiveZone giz = new GestureInteractiveZone( GestureInteractiveZone.GESTURE_ALL ); // Set bounding rectangle of zone giz.setRectangle( x, y, width, height );

Gestures – Step 2

Define GestureListener

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 103

// Define a GestureListener class GestureCanvas extends Canvas implements GestureListener { protected void paint(Graphics g) { … } public void gestureAction( Object container, GestureInteractiveZone zone, GestureEvent event) { ... } }

Gestures – Step 3

Register the GestureInteractiveZone with the

GestureRegistrationManager

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 104

// Register for Gesture events Canvas canvas = new GestureCanvas(); GestureRegistrationManager.register( canvas, giz ); GestureRegistrationManager.setListener( canvas, canvas );

Handling gestureAction()

Process values of registered gestures

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 105

public void gestureAction( Object container, GestureInteractiveZone zone, GestureEvent event) {

switch( event.getType() ) { case GestureInteractiveZone.GESTURE_TAP: case GestureInteractiveZone.GESTURE_DOUBLE_TAP: case GestureInteractiveZone.GESTURE_LONG_PRESS: case GestureInteractiveZone.GESTURE_LONG_PRESS_REPEATED: case GestureInteractiveZone.GESTURE_DRAG: case GestureInteractiveZone.GESTURE_DROP: case GestureInteractiveZone.GESTURE_FLICK: case GestureInteractiveZone.GESTURE_PINCH: } }

GestureEvent

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 106

Methods

int getType() int getPinchCenterChangeX()

int getStartX() int getPinchCenterChangeX()

int getStartY() int getPinchCenterX()

int getDragDistanceX() int getPinchCenterY()

int getDragDistanceY() int getPinchDistanceChange()

float getFlickDirection() returns flick direction in radians int getPinchDistanceCurrent()

int getFlickSpeed() int getPinchDistanceStarting()

int getFlickSpeedX() int getFlickSpeedY()

Gesture Flick Direction getFlickDirection returns float which is the direction in radians

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 107

Using: Gestures Register as gesture listener

– Zone: reacts to 1+ specified gestures

• Whole screen or rectangular area

• Overlap possible

– Received events → GestureListener

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 108

public class MainCanvas extends Canvas implements GestureListener { private int curPinchDistance = -1; public MainCanvas() { // Set this as container (gesture source) and listener GestureRegistrationManager.setListener(this, this); // Register for pinch events in the whole canvas area gestureZone = new GestureInteractiveZone(GestureInteractiveZone.GESTURE_PINCH); GestureRegistrationManager.register(this, gestureZone); }

Example: PaintApp

Using: Gestures Handling gestures

– Executed in UI thread • Lengthy operations (scaling image, etc.) → own thread!

– Parameters only valid during call (instances reused for next call-back)

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 109

public void gestureAction(Object container, GestureInteractiveZone gestureInteractiveZone, GestureEvent gestureEvent) { int eventType = gestureEvent.getType(); switch (eventType) { case GestureInteractiveZone.GESTURE_PINCH: // Pinch detected curPinchDistance = gestureEvent.getPinchDistanceCurrent(); break; case GestureInteractiveZone.GESTURE_RECOGNITION_START: /* ... */ break; case GestureInteractiveZone.GESTURE_RECOGNITION_END: /* ... */ break; } }

Example: PaintApp

LOCATION Positioning with Cell-Ids and GPS

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 110

Network-based Positioning Accuracy

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 112

500 m 2000 m 4000 m

Urban: 50% within 250 m 80% within 500 m

100 % hit rate

100 m

Sub – Urban: 50% within 600 m 80% within 1.5 km

80-90 % hit rate

Rural: 50% within 1500 m

80% within 3 km 60-90 % hit rate

WLAN: Up to 30m precision in

urban areas

Cell-id precision offered across Asha range of phones Only on WLAN phones

Cell ID Positioning

Specify the acceptable location methods

Get corresponding location provider

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 113

//Specify the retrieval method to Online/Cell-ID int[] methods = {(Location.MTA_ASSISTED | Location.MTE_CELLID | Location.MTE_SHORTRANGE | Location.MTY_NETWORKBASED)}; // Retrieve the location provider LocationProvider provider = LocationUtil.getLocationProvider(methods, null); // 50 seconds time-out Location loc = provider.getLocation(50000); // Get longitude and latitude QualifiedCoordinates coordinates = loc.getQualifiedCoordinates(); double lat = coords.getLatitude(); double lng = coords.getLongitude();

Example: mapExample

Cell ID Positioning Approximate location using cell ID

– Online: ~ 3-10 kB per request

– Phone sends current cell ID(s) to a web service

– Gets known location of cell ID in return

Using cell ID positioning – Request generic LocationProvider through Nokia’s LocationUtil – No continuous updates (Listener) → 1-time, synchronous requests

• Run in own thread

– Raw cell ID: com.nokia.mid.cellid system property *

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 116

* Series 40 5th Edition FP1 +: Manufacturer & Operator Domains. Java Runtime 1.0.0+: all domains

HERE MAPS Nokia Maps →

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 117

Maps API Features

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 118

Supports local search and places look-up by

category

Geo-coding & Reverse Geo-coding:

coordinates ←→

street address

Routing between any start and end point,

taking into consideration

transport and traffic preferences

Lets users send images or URL in SMS

Message

Integrated KML to show the content

on the map without having to

recreate it manually

Show maps as street map, satellite or terrain. Custom

content: markers, polylines

Plans

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 119

Base, Free Unlimited 2D Map Tiles

2.500 daily limit for each other feature

Core, $1500 / month Unlimited 2D Map Tiles

10.000 daily limit for each other feature Traffic Tile Service including Flow and

Patterns Service Level Agreement (SLA)

- 2D Maps Tiles, served via CDN, in Normal, Mobile, Pedestrian, Satellite/Aerial, Grey - 2D Static Maps - Car Routing - Pedestrian Routing - Geocoding - Reverse Geocoding - Places Discovery and Search

Maps API Latest version included in Nokia Asha SDK

– Documentation: developer.here.com/java

Always requires AppID and Token

– developer.here.com/web/guest/myapps

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 120

C:\Nokia\Devices\Nokia_Asha_SDK_1_0\plugins\maps api\

Maps Project Template Create empty project – File → New →

Java ME MIDlet

– Select Map MIDlet Template

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 121

Add Maps Library to Projects Nokia IDE

Project properties → Java Build Path → Add External JARs...

Select relevant Maps API jar files

Ensure Libraries are exported

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 122

Maps Libraries

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 123

Library File Use For JAR Size (kB)

maps-core Base lib – always required 139

maps-components Map components (info bubbles, buttons, etc)

28

maps-gesture Adds gesture support (requires Gesture API 1.2+)

7

maps-kml Process + display KML data 32

places Places, (reverse) geocoding, sharing 95

routing Routing service 21

Using: Maps

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 124

public class MapMidlet extends MIDlet implements GeocodeRequestListener { private MapCanvas mapCanvas; public void startApp() { // Set registered application ID and token ApplicationContext.getInstance().setAppID("xxx"); ApplicationContext.getInstance().setToken("xxx"); // Create new Nokia Maps canvas Display display = Display.getDisplay(this); mapCanvas = new MapCanvas(display) { public void onMapUpdateError(...) {} public void onMapContentComplete() {} }; mapCanvas.getMapDisplay().setZoomLevel(1, 0, 0); // Show map on the screen display.setCurrent(mapCanvas); } }

Example: mapExample

// Geocode an address GeocodeRequest geocodeRequest = SearchFactory.getInstance().createGeocodeRequest(); geocodeRequest.geocode("Vienna, Austria", null, this); // ... center map on the latitude and longitude public void onRequestComplete(GeocodeRequest request, com.nokia.maps.common.Location[] locations) { mapCanvas.getMapDisplay().setCenter(locations[0].getDisplayPosition()); }

Map Marker Place markers on the map – Pre-defined images

– Custom images

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 125

Example: mapExample

// Set marker to position GeoCoordinate pos = new GeoCoordinate(48.20254, 16.3688, 0.0f); // MapFactory instantiates objects on the map MapFactory mapFactory = mapCanvas.getMapFactory(); // Create a standard marker at the specified position MapStandardMarker marker = mapFactory.createStandardMarker(pos); // Set visual type of the marker marker.setShapeType(MapStandardMarker.BALLOON); // Add the marker to our map mapCanvas.getMapDisplay().addMapObject(marker);

– Multiple map types – conventional street map, satellite and terrain

– Touch support – use touch to pan and zoom the map

– Customizable markers – set color, labels and images

– Polygons, polylines – set colors and transparency levels

– Overlay support – set color/labels or use custom images

– Download indicator – provided as a standard UI component

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 126

Map View Features

(Maps Video 1) 2G Network Location 2 Different Operators

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 127

(Maps Video 2) 2G Network Location

vs 3G Network Location

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 128

COMPATIBILITY Running the same app on multiple phones

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 129

Compatibility? Source & binary compatible – xx years old Java ME apps run on

full touch phones!

Downwards compatibility – Check API support of target phones

– Lowest common denominator: → Nokia Asha SDK compiled app runs on old phones

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 130

Porting to Touch All Java ME apps should run on full touch phone

– High-Level UI • Adapts automatically

• Components include touch-support

• Check layout

• New UI components (CategoryBar, etc.) don’t have to be used

– Low-Level UI • New screen size & aspect ratio (but: most Java apps already flexible here)

• Touch supported in Java ME since many years

New APIs for Internationalization, Multitouch, Pinch, CategoryBar & Sensors – Only work on new phones

– Careful app design even keeps downwards compatibility

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 131

Porting

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 132

Non

-tou

ch

Touc

h an

d ty

pe

Example: RpsGame

Full

touc

h

Non-touch app with high-level UI (LCDUI): automatically adapts

Asha

Dynamic API Usage Single code base for different phones

– Code that uses new APIs • Externalize to extra class

– Check API support at runtime • Instantiate class if supported

• Different methods for checking available

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 133

Example: Pinch Gesture Gesture API – Available in Touch & Type

– Full Touch adds Pinch gesture

– Query support at runtime

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 134

Example: PaintApp

// Pinch gesture if (GestureInteractiveZone.isSupported(GestureInteractiveZone.GESTURE_PINCH)) { // Gesture is supported - register class as listener GestureRegistrationManager.setListener(this, this); // Register for pinch gesture gestureZone = new GestureInteractiveZone(GestureInteractiveZone.GESTURE_PINCH); GestureRegistrationManager.register(this, gestureZone); }

Example: Optional Multitouch Encapsulate API using code to separate class

Check support and instantiate on demand

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 135

public class MultitouchManager implements MultipointTouchListener { public MultitouchManager(MainCanvas canvas) { MultipointTouch mpt = MultipointTouch.getInstance(); mpt.addMultipointTouchListener(this); } public void pointersChanged(int[] pointerIds) { /* ... */ } }

if (System.getProperty("com.nokia.mid.ui.multipointtouch.version") != null) { // API is supported: Can implement multipoint touch functionality multiManager = new MultitouchManager(this); useMultitouch = true; }

protected void pointerPressed(int x, int y) { if (!useMultitouch) { // Handle touch event // on single-touch phone } }

In MainCanvas class (extends Canvas)

Hint: only handle Canvas.pointerPressed() on single touch phones

Example: PaintApp

Example: API Availability No System property for the API version? – Check Class availability

– ClassNotFoundException? → API not supported

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 136

// Virtual keyboard support try { // Check if class is available Class.forName("com.nokia.mid.ui.VirtualKeyboard"); vkbManager = new VkbManager(this); useVkb = true; } catch (ClassNotFoundException e) { // Class not available: running app on Java Runtime < 2.0.0 phone. // -> no Virtual Keyboard API support. useVkb = false; } catch (Exception e) { }

Example: PaintApp

Need for Threads Protected methods – From commandAction()

• = event dispatch thread

• Asha Platform: Throws SecurityException “Blocking call performed in the event thread”

→ Call from extra thread!

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 137

THANK YOU!

Andreas Jakl Twitter: @mopius www.mopius.com

14.05.2013 Nokia Asha Training | Andreas Jakl, Mopius 138