"JavaME + Android in action" CCT-CEJUG Dezembro 2008

Preview:

DESCRIPTION

Mini-cursos de JavaME e Android no evento do CEJUG Café com Tapioca, em Dezembro de 2008. 1. Introdução: overview do desenvolvimento em Java para dispositivos portáteis/móveis 2. Java ME in action: tutorial hands-on de desenvolvimento (mini-curso) 3. Android in action: tutorial hands-on de desenvolvimento (mini-curso) Autor: Vando Batista

Citation preview

JavaME + Android in action

Java Platforms for Mobility Java Platforms for Mobility

CEJUG CCT

Coffee with Tapioca, December 2008

Vando Batista

Some Rights Reserved

Objectivity

Introduce the Java development platforms for

mobile devices,

JavaME and Android, performing

implementations activities for each one, in a implementations activities for each one, in a

lab-style practice, with some APIs

Target audience: Java developers interested on

Mobile Platforms

Agenda

• Overview on Mobile Platforms

• Java ME in action

• Android in action

• Challenge • Challenge

After this course you will…

• identify mobile platforms characteristics

• understand how to implement a JavaME

application

• understand how to implement a Android • understand how to implement a Android

application

• have implemented, at least, one application

for each platform

• maybe… win a book: Free Software and Digital

Inclusion (in Portuguese)

Applications…

• Location Based Systems

• m-commerce, collaboration, marketing

• Mobile Social Networks

• Military• Military

• Search and safety

On the move apps

Improve user experience

Users: mobile vs. desktop

• India: Many more mobile than desktop Web users (4 to 1),

The Economic Times, Oct 2007

Motivation

• Evolution, popularization

– Device resources

– Connectivity

• Business applications for mobile devices• Business applications for mobile devices

– Growing 102% per year, until 2012 - Mobile

Business Applications and Services, ABI Research

• New services, new opportunities

Mobile Ecosystem

Source: SDN - java.sun.com/javame

Mobile, Portable Devices

Mobile Networks

3G, 4G...

Development Platforms

Mobile Computing

“Computing that deals with connection

exploration on mobile devices”Coulouris, Dellimore, Kindberg. Distributed Systems (4th edition)

Mobility transparency Mobility transparency

allows the movement of resources and clients

within a system without affecting the

operation of users or programs. Two flavours:

migration and relocation

"small is the better"

• Challenges

– Devices

– Networks

– Limitations and heterogeneity– Limitations and heterogeneity

• Dependencies

– Power: battery autonomy

– Resource: connection availability

“Remember that there is no code faster than no

code” Taligent‘s Guide to Designing Programs

Mobile Development

• Software Development Kit (SDK)

– Emulator, Documentation, Tools, Services, etc.

• Integrated Development Environment (IDE)

• IDE Plugins• IDE Plugins

Are you ready?

Set your Set your

environments!

http://www.cejug.org/display/cejug/Ambiente+para+os+mini-

cursos+de+JavaME+e+Android

Welcome to the…

JavaME

DevelopmentDevelopment

Introduction

• Java Platform, Micro Edition

– Java Community Process (JCP) based

– Java Specification Request (JSR)

• Reference Implementation (RI)• Reference Implementation (RI)

• Test Compatibility Kit (TCK)

• Proprietary APIs

• Native Applications

• Since 2000

• 80% handsets: 1.2bi phones, 1200 models,

180 carriers

Architecture

• JVM, KVMSource: SDN - java.sun.com/javame

Core APIs

• Configuration

– CLDC, CDC, BD-J

• Profile

– MIDP, IM, PP, PBP, FP– MIDP, IM, PP, PBP, FP

• Umbrella

– Fragmentation: Computational, Physical,

Functional

– JTWI, MSA (Full, Subset)

Development Infrastructure

• Many environments: handset dependency

• For this lab:

– SDK: Sun WTK 2.5.2, JME SDK 3.0

– IDE: Eclipse Ganymede (3.4)– IDE: Eclipse Ganymede (3.4)

– Plugin: Mobile Tools for Java 0.9

• Unified Emulator Interface (UEI)

Hello JavaME World!

• build, obfuscate, preverify, run, debug, and

deploy

• Create a project

• Project structure• Project structure

• Create a MIDlet

– javax.microedition.midlet.MIDlet

• Over the Air (OTA) / installation

• On Device Deployment/Debug

• MIDlet.this.platformRequest(“tel:*”)

MIDlet Lifecycle

• Application Management Software (AMS)

– Java Application Manager (JAM)

• notifyDestroyed()

• notifyPaused()

• resumeRequest()

MIDlet Lifecycle

Codingimport javax.microedition.midlet.MIDlet;

public class HelloWorld extends MIDlet {

public HelloWorld() {

System.out.println(“MIDlet constructor");

}

protected void destroyApp(boolean arg0) {protected void destroyApp(boolean arg0) {

System.out.println(" MIDlet destroyApp()");

}

protected void pauseApp() {

System.out.println(" MIDlet pauseApp()");

}

protected void startApp() {

System.out.println(" MIDlet startApp()");

}

}

Application Packaging

• Profile dependent

• MIDlet Suite

– Java ARchive (.JAR)

– Java Application Descriptor (.JAD)– Java Application Descriptor (.JAD)

• Package generation

Application Configuration

• Java Application Descriptor (.JAD), Manifest

• MIDlets

• Permissions

• Properties:• Properties:

– System

System.getProperty(“javax.microedition.*”)

– Application

MIDlet.this.getAppProperty("propertyName")

Code Optimization

• Free objects

• String Vs. StringBuffer

• Arrays Vs. Collection

• Moderate use• Moderate use

– Synchronized

– Instance variables

– Parameter number

– Resources initiation

– Interfaces, internal classes

• JAR obfuscation, compression

GUI

Source: IBM - ibm.com

GUI

Codingpublic class HelloWorld extends MIDlet {

private Display display;

private Form myForm;

// initialization on MIDlet constructor

public startApp() {

display = Display.getDisplay(this);

// display.getCurrent();

display.setCurrent(myForm);

}

...

}

Keyboard Handling

• Components

– javax.microedition.lcdui.CommandListener

– javax.microedition.lcdui.Command

• Registration• Registration

– setCommandListener(CommandListener l)

• Notification

– commandAction(Command c, Displayable d) {}

• Potential deadlock: operations such as IO and

networking should run on a separate thread

Keyboard Handling

Codingpublic class HelloWorld extends MIDlet {

Displayable d = new TextBox(“Title”, “Body”,

20,TextField.ANY);

Command c = new Command(“Exit”, Command.EXIT, 0);

d.addCommand(c);

d.setCommandListener(new CommandListener() {d.setCommandListener(new CommandListener() {

public void commandAction(Command c, Displayable

s) {

doSomeAction();

}

} );

}

Persistent Storage

• Record Management System (RMS)

– javax.microedition.rms.*

• RecordStore

• RecordEnumeration• RecordEnumeration

• RecordComparator

• RecordFilter

Persistent Storage

Coding...

RecordStore rs = null;

String value = "Java ME in action";

...

try {

rs = RecordStore.openRecordStore(“RecName”, true);

byte[] recData = value.getBytes();

rs.addRecord(recData, 0, recData.length);

String data = new String(rs.getRecord(1));

} catch (Exception e) {

...

}

Connectivity

• Generic Connection Framework (GCF)

– javax.microedition.io.*

• Remote (Infrastructured)

– HTTP, HTTPS

– TCP, UDP– TCP, UDP

– Wireless Messaging (JSR120, 205)

– Push Registry (MIDP)

– SIP (JSR180)

• Local (Ad hoc)

– JABWT (JSR 82)

– Ad Hoc Networking API (JSR 259)

Source: SDN - java.sun.com/javame

Connectivity

CodingHttpConnection httpConn = null;

InputStream = null;

try {

httpConn = (HttpConnection)

Connector.open("http://www.cejug.org");

httpConn.setRequestMethod(HttpConnection.GET);

httpConn.setRequestProperty("User-Agent",

"Profile/MIDP-2.0 Configuration/CLDC 1.1");

is = httpConn.openInputStream();

int ch = -1;

while((ch = is.read()) != -1){

...

}

References

• Mobile and Embedded Guide to JavaOne 2008

– http://wiki.java.net/bin/view/Mobileandembedded/JavaO

ne2008

• A Survey of Java ME Today

– http://developers.sun.com/mobility/getstart/articles/surv

ey/

• Java ME Device Table

– http://developers.sun.com/mobility/device/

• JEDI course (DFJUG)

– http://jedi.wv.com.br

Welcome to the…

Android

DevelopmentDevelopment

Open Handset Alliance

Manufactures

CarriersSemiconductors

SoftwareContent

Introduction

• Software stack

– Operating System

• Linux Kernel (v2.6)

– Middleware– Middleware

• Services

– Applications

• Java

• Dalvik: custom virtual machine for embedded

• Since 2008

HTC Dream (G1)

Characteristics

• Applications…

– without borders

– are created equal

– can run in parallel– can run in parallel

– can easily embed the web

• Open source

– http://source.android.com

• Apache 2.0 and GLP v2 license

Architecture

Basic Components

• Activity

– UI component (Form like) typically corresponding

to one screen

• Intent Receiver• Intent Receiver

– Set and respond to an external event: notifications

or status changes. Can wake up your app

• Services

– Task without UI that runs in the background

• Content Provider

– Allow applications to share data

Packages

android.util

android.os

android.graphics

android.text

android.telephony

android.hardware

android.text

android.database

android.content

android.view

android.widget

android.app

android.net.wifi

android.location

android.media

android.opengl

Development Infrastructure

• Recommended environment

• For this lab:

– SDK: AndroidSDK 1.0

• QEMU-based (system image)• QEMU-based (system image)

– IDE: Eclipse Ganymede (3.4)

– Plugin: Android Development Tool 0.8, WST

• Add to environment variable PATH

– tools directory

• A lot of XML for application, activity, intent,

layout, view, variable

Hello Android World!

• Create a project

• Create an Activity

– android.app.Activity

• Project structure• Project structure

• LogCat

• Deployment/Debug

Application Configuration

• AndroidManifest.xml

• Application

– Activity, Intent Filter

• Permissions• Permissions

<?xml version="1.0" encoding="utf-8"?>

<manifest

xmlns:android="http://schemas.android.com/apk/res/android"

package="org.cejug.android"

android:versionCode="1"

android:versionName="1.0.0"

android:screenOrientation="landscape">

...

Application Anatomy

• Activity

– Can reuse functionality from other components by

making a request in the form of an Intent

– Can be replaced at any time by a new Activity – Can be replaced at any time by a new Activity

with an equivalent IntentFilter

• Intent

– Request to do something: move from screen to

screen. Activity.startActivity(myIntent)

• Intent Filter

– Description of Intent types

Application Configuration

...

<application android:icon="@drawable/icon"

android:label="@string/app_name">

<activity android:name=".HelloActivity"

android:label="@string/app_name">

<intent-filter><intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity android:name=".HelloListActivity"

android:label="ListActivity">

</activity>

</application>

</manifest>

• Activities are

stacked

• Only one is • Only one is

active

• Only one is

open

Application

Codingpublic class HelloActivity extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

TextView tv = new TextView(this);

• onStart(), onResume(), onPause(), onStop(),

onRestart(), onDestroy()

TextView tv = new TextView(this);

tv.setText("Hello, Android");

setContentView(tv);

...

}

}

SDK Tools

• Emulator

• Dalvik Debug Monitoring System (ddms)

• Android Debug Bridge (adb)

• Android Asset Packaging Tool (aapt)• Android Asset Packaging Tool (aapt)

• Android Interface Description Language (aidl)

• sqlite3

• Traceview

• mksdcard

• dx, activitycreator, and others

Application Packaging/Deployment

• APK file

– .DEX

• Log into a Linux server via a shell

• Installation• Installation

– adb install Application.apk

– Uninstall• adb shell (remove file from /data/app/)

GUI

• Define in: code or XML

• res/layout

• Views

– Text, Edit, List– Text, Edit, List

– Image, Web, Map

• Layouts

– Frame, Linear, Relative, Table, Absolute

res/layout/main.xml - Views

<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="horizontal"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:background="@drawable/icon">

res/layout/main.xml - Layouts

<Button android:id="@+id/callButton"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="Show Dialer" />

<EditText android:id="@+id/phoneNumber"

android:layout_width="fill_parent"android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

Event Handling

Coding…

final EditText phoneNumber = (EditText)

findViewById(R.id.phoneNumber);

Button callButton = (Button) findViewById(R.id.callButton);

callButton.setOnClickListener(new Button.OnClickListener()

{

public void onClick(View v) {public void onClick(View v) {

Intent CallIntent = new Intent(Intent.ACTION_CALL, Uri

.parse("tel:" + “+5585" + phoneNumber.getText()));

CallIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(CallIntent);

}

});

Emulator: No support for…

• Placing or receiving actual phone calls

• USB connections

• Camera/video capture (input)

• Audio input• Audio input

• Determining connected state

• Determining battery charge level / AC state

• Bluetooth

References

• Android Documentation

– http://code.google.com/android

• Android A Programmers Guide (Jerome

DiMarzio, Mc Graw Hill)DiMarzio, Mc Graw Hill)

• Professional Android Application Development

(Reto Meier, Willey Publishing)

• Many sites, forums, videos, screencasts,

presentations…

Would you like to be challenged?

Practice matters!Practice matters!

Challenge Requirements

• Based on our lab practice

• Create an application on JavaME or Android

platform following the requirement

– Receive a user text input through a wizard– Receive a user text input through a wizard

Questions & Answers

Thank you!Vando Batista

vandofb at gmail.com

msn: vfbatista at hotmail.com

skype: vfbatista