using sensors in java me apps on series 40

25
Attila Csipa [@achipa] Technology Wizard, Nokia 1 © 2012 Nokia Using accelerometers and other sensors in Java ME on Series 40 v1.1 October 23, 2012 Attila Csipa USING ACCELEROMETERS AND OTHER SENSORS IN JAVA ME ON SERIES 40

Upload: microsoft-mobile-developer

Post on 19-May-2015

2.122 views

Category:

Documents


1 download

DESCRIPTION

This webinar will introduce you to the sensors embedded on Nokia Asha phones and how to use them in Java ME apps and games. The structure and usage of the Mobile Sensor API (JSR-256) will be covered. Attila Csipa, technology wizard at Nokia in Tampere, Finland, will give you a short overview that will be followed by plenty of examples and live coding demos. He’ll use the Nokia IDE for Java™ ME (Eclipse-based) to show you how to build your code. He’ll also share best practices and user-experience recommendations based on the most common use cases.

TRANSCRIPT

Page 1: Using sensors in java me apps on series 40

Attila Csipa [@achipa] Technology Wizard, Nokia

1 © 2012 Nokia Using accelerometers and other sensors in Java ME on Series 40 v1.1 October 23, 2012 Attila Csipa

USING ACCELEROMETERS AND OTHER SENSORS IN JAVA ME ON SERIES 40

Page 2: Using sensors in java me apps on series 40

CONTENTS • Introduction

– Platforms & Versions • Sensors

– Physical vs virtual – JSR-256 – Measurables – Accelerometers – Usage – UI considerations – Performance – App Compatibility

• Resources

2 © 2012 Nokia Using accelerometers and other sensors from Java ME on Series 40 v1.1 October 23, 2012 Attila Csipa

Page 3: Using sensors in java me apps on series 40

PLATFORMS

3 © 2012 Nokia Using accelerometers and other sensors from Java ME on Series 40 v1.1 October 23, 2012 Attila Csipa

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

API Differences: bit.ly/S40Apis

http://www.developer.nokia.com/Devices/Device_specifications/Comparison.xhtml?dev=Asha_306,Nokia_Asha_309,Asha_311

Page 4: Using sensors in java me apps on series 40

DP 2.0 – NEW APIS

4 © 2012 Nokia Using accelerometers and other sensors from Java ME on Series 40 v1.1 October 23, 2012 Attila Csipa

Full touch UI

Virtual Keyboard

Multipoint Touch APIs

Gestures: Pinch

Sensors & Orientation

...

Page 5: Using sensors in java me apps on series 40

5 © 2012 Nokia Using accelerometers and other sensors from Java ME on Series 40 v1.1 October 23, 2012 Attila Csipa

SENSORS

Etymology Originated 1925–30 from sense + -or. Noun sensor (plural sensors) A device or organ that detects certain external stimuli and responds in a distinctive manner.

Page 6: Using sensors in java me apps on series 40

SENSORS: PHYSICAL VS VIRTUAL

• Physical sensors (physical values, g or m/s, mbar, etc)

– Acceleration – Light – ...

• Virtual sensors (combined or interpreted values, %, enum-s)

– Battery level – Orientation – …

6 © 2012 Nokia Using accelerometers and other sensors from Java ME on Series 40 v1.1 October 23, 2012 Attila Csipa

Page 7: Using sensors in java me apps on series 40

SENSORS: JSR-256

• JSR 256 Sensor API – Generic: designed also for temperature, blood pressure, etc.

– Support on Series40 from DP2.0 (Asha Full Touch)

– Also available on Symbian (from S60 5th edition onwards)

• Two packages javax.microedition.sensor (read information)

javax.microedition.sensor.control (settings, start/stop)

7 © 2012 Nokia Using accelerometers and other sensors from Java ME on Series 40 v1.1 October 23, 2012 Attila Csipa

JSR page at http://bit.ly/VdZDlG

Page 8: Using sensors in java me apps on series 40

SENSORS: WHAT TO LOOK FOR

• Currently supported – Battery Charge: 0 .. 100, charge percentage – Network Field Intensity: 0 .. 100, signal strength – Charger State: 0 .. 1, charger connected – Acceleration: –2g .. +2g, x / y / z axis – Double Tap: 1 .. 63, phone sides – Orientation: 0 .. 6, phone orientation

8 © 2012 Nokia Using accelerometers and other sensors from Java ME on Series 40 v1.1 October 23, 2012 Attila Csipa

Page 9: Using sensors in java me apps on series 40

SENSORS: ACCELEROMETERS ARE COOL

• Enrich user interaction – Doesn’t suffer from finger size limits

– Doesn’t suffer from screen size limits

– Doesn’t interfere with what the user sees on the screen

– Natural interaction

• Ideal for games!

9 © 2012 Nokia Using accelerometers and other sensors from Java ME on Series 40 v1.1 October 23, 2012 Attila Csipa

Page 10: Using sensors in java me apps on series 40

SENSORS: UNDERSTANDING ACCELEROMETERS

• Acceleration is CHANGE of the speed vector • Standstill normalized value is 1.0, why? GRAVITY • Nitpick - accelerometers measure translation not rotation • Rotation can still be measured indirectly (we measure

gravity vector hopping from one axis to the other)

10 © 2012 Nokia Using accelerometers and other sensors from Java ME on Series 40 v1.1 October 23, 2012 Attila Csipa

Page 11: Using sensors in java me apps on series 40

SENSORS: API AVAILABILITY

• No System property for the API version? – Check Class availability

– ClassNotFoundException? → API not supported

11 © 2012 Nokia Using accelerometers and other sensors from Java ME on Series 40 v1.1 October 23, 2012 Attila Csipa

// Virtual keyboard support try { // Check if class is available Class.forName("javamicroedition.sensor.SensorConnection"); // SensorManager.findSensors("acceleration", null); useSensors = true; } catch (ClassNotFoundException e) { // Class not available: -> no Sensor API support. useSensors = false; } catch (Exception e) { }

Example: Racer, aMaze

Page 12: Using sensors in java me apps on series 40

SENSORS: USING THEM – ROLL YOUR OWN

• Establish sensor connection

• Check data in game loop

12 © 2012 Nokia Using accelerometers and other sensors from Java ME on Series 40 v1.1 October 23, 2012 Attila Csipa

// Find all acceleration sensors, the contextType is left undefined SensorInfo[] sensorInfos = SensorManager.findSensors("acceleration", null); // Find an acceleration sensor that returns double values for (int i = 0; i < sensorInfos.length; i++) { if (sensorInfos[i].getChannelInfos()[0].getDataType() == ChannelInfo.TYPE_DOUBLE) { accSensor = (SensorConnection) Connector.open(sensorInfos[i].getUrl()); } }

// Use 1 as a buffer size to get exactly 1 value for each axis Data[] data = accSensor.getData(1); speedX = -data[0].getDoubleValues()[0]; // data[0] => x-axis speedY = data[1].getDoubleValues()[0]; // data[1] => y-axis

Example: MovingBall

Page 13: Using sensors in java me apps on series 40

SENSORS: USING THEM – COPY WITH PRIDE

• Use the wrapping classes from Nokia Developer examples

13 © 2012 Nokia Using accelerometers and other sensors from Java ME on Series 40 v1.1 October 23, 2012 Attila Csipa

private void enableSensors() { if (accelerationProvider != null) { accelerationProvider.close(); } accelerationProvider = AccelerationProvider.getProvider( new AccelerationProvider.Listener() { public void dataReceived(double ax, double ay, double az) { if (isSensorTurning()) { tilt = (int) ay; } } }); if (accelerationProvider != null) { Main.sensorsSupported = true; } else { Main.sensorsSupported = false; } }

Page 14: Using sensors in java me apps on series 40

SENSORS: UI CONSIDERATIONS

• Calibrate! (see aMaze example) • Look for change, not particular values • Which axis is which (portrait vs landscape) • Anticipate noise in readings (average values if needed) • Don’t force accelerometer usage if it doesn’t add to the

user experience

14 © 2012 Nokia Using accelerometers and other sensors from Java ME on Series 40 v1.1 October 23, 2012 Attila Csipa

Page 15: Using sensors in java me apps on series 40

SENSORS: PERFORMANCE

• Filter (LimitCondition) for values you’re really interested in • Separate from mainloop – use Threads (see Cottage360

video and source) • Responsiveness is more critical than with keyboard input • Choose right frequency (is 100 reads/sec really needed?)

15 © 2012 Nokia Using accelerometers and other sensors from Java ME on Series 40 v1.1 October 23, 2012 Attila Csipa

Page 16: Using sensors in java me apps on series 40

16 © 2012 Nokia Using accelerometers and other sensors from Java ME on Series 40 v1.1 October 23, 2012 Attila Csipa

COMPATIBILITY

Page 17: Using sensors in java me apps on series 40

COMPATIBILITY? CODE CONSIDERATIONS

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

full touch phones (and vice versa)!

• Downwards compatibility – Check API support of target phones – Lowest common denominator:

→ Nokia Java SDK 2.0 compiled app runs on old phones

17 © 2012 Nokia Using accelerometers and other sensors from Java ME on Series 40 v1.1 October 23, 2012 Attila Csipa

Page 18: Using sensors in java me apps on series 40

COMPATIBILITY? USE-CASE CONSIDERATIONS

• Input type – Sensors complementing buttons (universal)

– Discrete input CAN be easier with buttons (f.ex Snake)!

– Sensors complementing touch controls (touch&type) – Most common

– Accelerometer only (no pre-DP2.0) – Rarer than you think, but possible! (f.ex wire loop game)

18 © 2012 Nokia Using accelerometers and other sensors from Java ME on Series 40 v1.1 October 23, 2012 Attila Csipa

Page 19: Using sensors in java me apps on series 40

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

19 © 2012 Nokia Using accelerometers and other sensors from Java ME on Series 40 v1.1 October 23, 2012 Attila Csipa

Page 20: Using sensors in java me apps on series 40

22 © 2012 Nokia Using accelerometers and other sensors from Java ME on Series 40 v1.1 October 23, 2012 Attila Csipa

RESOURCES & TIPS

Page 21: Using sensors in java me apps on series 40

NOKIA IDE FOR JAVA ME

23 © 2012 Nokia Using accelerometers and other sensors from Java ME on Series 40 v1.1 October 23, 2012 Attila Csipa

Device SDK Manager

Integrated SDK + Toolchain

App Templates

JAD Editor

Page 22: Using sensors in java me apps on series 40

CODE EXAMPLES • Nokia IDE

– Nokia Hub → Nokia Series 40 Code Examples

• Online – bit.ly/JavaMeExamples

• Emulator – Help → MIDlet Samples

• Maps & LWUIT – C:\Nokia\devices\Nokia_SDK_2_0_Java\plugins

24 © 2012 Nokia Using accelerometers and other sensors from Java ME on Series 40 v1.1 October 23, 2012 Attila Csipa

Page 23: Using sensors in java me apps on series 40

CODE EXAMPLES SHOWN TODAY

• Wiki • aMaze • Racer • Cottage360 (episode 19)

25 © 2012 Nokia Using accelerometers and other sensors from Java ME on Series 40 v1.1 October 23, 2012 Attila Csipa

Page 24: Using sensors in java me apps on series 40

GET STARTED • Overview

– www.developer.nokia.com/Develop/Java/Getting_started/ • Downloads

– SDK: www.developer.nokia.com/Develop/Java/ – LWUIT: projects.developer.nokia.com/LWUIT_for_Series_40

• Guides – Design & User Experience – Porting from Android – www.developer.nokia.com/Develop/Java/Documentation/ – Training Videos: www.developer.nokia.com/Develop/Java/Learning/ – Code Examples: www.developer.nokia.com/Develop/Java/Code_examples/

27 © 2012 Nokia Using accelerometers and other sensors from Java ME on Series 40 v1.1 October 23, 2012 Attila Csipa

Page 25: Using sensors in java me apps on series 40

Want to learn more? www.developer.nokia.com Attila Csipa [@achipa] Technology Wizard, Nokia

28 © 2012 Nokia Using accelerometers and other sensors from Java ME on Series 40 v1.1 October 23, 2012 Attila Csipa

THANK YOU! QUESTIONS?