Download Reach vs. Rich - Microsoft Center

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Martin Løbger – IT Konsulent
[email protected]
Rich vs. Reach
En introduktion til J2ME/JavaME
The Chasm
Reach
J2ME
Rich
iPhone Android
Symbian Windows Mobile
Konsulentens svære valg
•
Reach
...er ikke så svært
J2ME
Symbian
Rich
iPhone/
Android
Windows
Mobile
Symbian
•
Eget af Nokia
•
På vej mod Open Source
•
Forum Nokia
•
Carbide.c++ C/C++ IDE
– Baserete på Eclipse 3.3 + plugins
Symbian OS API og C++ kode stilen
static const char hellorom[] = “hello”;
_LIT(KHelloROM, "hello");
const char *helloptr = hellorom;
TPtrC helloPtr(KHelloROM);
http://www.forum.nokia.com/Resources_and_Information/Explore/Runtime_Platform
s/Symbian_C++/Code_and_Examples.xhtml
Java
•
Udviklet af SUN Microsystems
•
Fortolket sprog
•
Bytekode
•
Pakket i JAR filer (zip format)
•
Obfuscating
•
Magic token: CAFEBABE
J2ME
MIDP – JSR 118
•
•
•
•
•
•
•
•
javax.microedition.io
javax.microedition.lcdui
javax.microedition.lcdui.game
javax.microedition.media
javax.microedition.media.control
javax.microedition.midlet
javax.microedition.pki
javax.microedition.rms
Den (langt fra) komplette JSR liste
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
JSR 75 File connection v1.0 and PIM v1.0 APIs
JSR 82 APIs for Bluetooth v1.1
JSR 118 MIDP v2.1
JSR 120 Wireless Messaging API 1.1
JSR 135 Mobile Media API 1.1 (audio and video play, audio capture only; does not support video capture,
camera control, or FM radio)
JSR 139 Connected Limited Device Configuration (CLDC) 1.1
JSR 172 JAX-XML Web Services API (XML parsing) and JAX-RPC API
JSR 177 Security and Trust Services APIs SATSA-APDU and SATSA-CRYPTO
JSR 179 Location API 1.0
JSR 184 Mobile Graphics API 1.1
JSR 205 Wireless Messaging API 2.0
JSR 211 Content Handler API 1.0
JSR 226 Scalable 2D Vector Graphics API 1.0
JSR 234 Advanced Multimedia Supplements (3D Audio & Music, Audio mixing, including audio progressive
upload and video progressive playback) 1.1
JSR 248 Mobile Service Architecture Subset API 1.0
Nokia UI API 1.1a
Kom godt igang
•
•
•
NetBeans
Eclipse Mobile Tools for Java (http://www.eclipse.org/dsdp/mtj)
– Tidligere kendt som EclipseME (http://eclipseme.org)
SDK
– SUN Java Platform Micro Edition SDK 3.0
http://java.sun.com/javame/downloads/sdk30.jsp
– Nokia S40
http://www.forum.nokia.com/Resources_and_Information/Tools/Platforms/Series_40_Platform_SDKs
– Sony Ericsson
http://developer.sonyericsson.com/site/global/docstools/java/p_java.jsp
– LG
http://developer.lgmobile.com/lge.mdn.tnd.RetrieveTNDInfo.laf
– Blackberry
– Skype/Amoi
– Windows Mobile
Java – næsten som vi kender det
J2SE
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
J2ME
import javax.microedition.midlet.MIDlet;
public class Hello extends MIDlet {
public void startApp() {
System.out.println("Hello, World!");
}
}
Hello World
Demo
/**
* Tries to retrieve the IMEI number of the phone. Not all platforms
* supports this feature.
*
* @return The IMEI number or "na" if the platform does not support this
*
feature.
*/
protected String getIMEI() {
String[] imeiProperties = {
// Generic
"IMEI", "phone.imei", "device.imei", "com.imei",
// Nokia specific
"com.nokia.IMEI", "com.nokia.mid.imei",
// Sony Ericsson specific
"com.sonyericsson.imei",
// Motorola specific
"com.motorola.IMEI",
// Samsung specific
"com.samsung.imei",
// Siemens specific
"com.siemens.imei"
};
for (int i = 0; i < imeiProperties.length; i++) {
try {
if (System.getProperty("microedition.platform").startsWith("Nokia6280")) {
continue;
}
String imei = System.getProperty(imeiProperties[i]);
if (imei != null) {
return imei;
}
}
catch (Exception e) {
}
}
return "na";
}
/**
* Tries to retrieve the IMEI number of the phone. Not all platforms
* supports this feature.
*
* @return The IMEI number or "na" if the platform does not support this
*
feature.
*/
protected String getIMEI() {
String[] imeiProperties = {
// Generic
"IMEI", "phone.imei", "device.imei", "com.imei",
// Nokia specific
"com.nokia.IMEI", "com.nokia.mid.imei",
// Sony Ericsson specific
"com.sonyericsson.imei",
// Motorola specific
"com.motorola.IMEI",
// Samsung specific
"com.samsung.imei",
// Siemens specific
"com.siemens.imei"
};
for (int i = 0; i < imeiProperties.length; i++) {
try {
if (System.getProperty("microedition.platform").startsWith("Nokia6280")) {
continue;
}
String imei = System.getProperty(imeiProperties[i]);
if (imei != null) {
return imei;
}
}
catch (Exception e) {
}
}
return "na";
}
byte data[] = null;
HttpConnection connection = (HttpConnection)Connector.open(“http://hiq.dk/login.apsx”, Connector.READ_WRITE);
try {
if (postData != null) {
connection.setRequestMethod(HttpConnection.POST);
connection.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
OutputStream os = connection.openOutputStream();
try {
os.write(postData.getBytes());
// os.flush(); //Including this line may produce undesired results on certain devices
/*
* If you call os.flush(), some devices will send the
* request in HTTP 1.1 "chunked" encoding by adding a
* "Transfer-encoding: chunked" header to the request
* and writing the size of each block of data in
* hexadecimal form as a text line before the data bytes
* themselves. This is repeated for any number of blocks
* you send, usually demarcated by calls to flush(). If
* you have a HTTP 1.1-compliant Web server this should
* be transparent to your server side scripts, but if
* you do not, you will either want to avoid calling
* flush() (though some devices may still chunk for you
* automatically) or write some HTTP 1.1 chunk handling
* code in your server scripts. All you will need to do
* in the latter case is read the first text line of the
* response, extract the size from it (i.e. "C\r\n"
* where C means 12 bytes of chunk follow), and then
* read 12 bytes of response data. Then read another
* line to see if there is another chunk size, and
* repeat until stream is closed or your script has all
* the data it needs. See the HTTP 1.1 specification for
* more details.
*/
}
finally {
os.close();
}
}
Test, test & test
•
Modning
•
Fysiske devices
– Alle producenter
– Bredt udsnit af modeller (eks. Nokia S40 + S60)
– Skærmstørrelser
– JSR features
Remote Device Access Services
http://apu.ndhub.net/
Deploying
•
Bluetooth
•
MMS
•
Web Server
– Mimetypes
• .jar
• .jad
application/java-archive
text/vnd.sun.j2me.app-descriptor
JAD & JAR
JAD – Java Descriptor
MIDlet-1:
Main,,dk.hiq.helloworld.Main
MIDlet-Jar-URL:
[webserver]/HelloWorld.jar
MIDlet-Name: PanicWorld MIDlet Suite
MIDlet-Vendor: MIDlet Suite Vendor
MIDlet-Version: 1.0.0
MicroEdition-Configuration: CLDC-1.1
MicroEdition-Profile: MIDP-2.1
JAR – Java Archive
• Zip fil
• .class filer
• Manifest
• Resources (read only)
Konklusion
•
Reach
– Tja, i teorien
– Man kan dog komme langt
•
Code once, deploy many
– Nok snarere: Code a couple of times, deploy many