Archive for the ‘Smartphone’ Category:
Phone ReUnion: A little bit of iPhone Joke
Tags: application, blackberry, bluetooth, crackberry, funny, humor, humour, iphone, joke, mobile, phone, reunion
JavaME JSR-179 Example Code : Detect Location via TinyGeocoder
I've completed the JSR-179 Location API code for reverse geocoding in JavaME. This code essentially is an expansion of the previous JSR-179 example that i've posted in the blog before, plus the Reverse-Geocoding feature, thanks to TinyGeocoder service.

What this sample MIDlet does?
It obtain coordinates via the mobile phone JSR-179 Location API and subsequently display the name of the location using TinyGeocoder reverse geocoding service.
-
import javax.microedition.midlet.*;
-
import javax.microedition.lcdui.*;
-
import javax.microedition.location.*;
-
import javax.microedition.io.*;
-
import javax.microedition.location.*;
-
import java.io.*;
-
-
public class Geocoder extends MIDlet implements CommandListener
-
{
-
public Display display;
-
public Form form;
-
private Command cmdExit,cmdOK;
-
public StringItem si, sili;
-
-
public Geocoder()
-
{
-
-
display =Display.getDisplay(this);
-
form = new Form("Location Api test");
-
cmdExit = new Command("Exit",Command.EXIT,5);
-
cmdOK = new Command("OK",Command.OK,1);
-
si = new StringItem("Coordinates", "Press OK");
-
sili = new StringItem("Location", "");
-
form.append(si);
-
form.append(sili);
-
form.addCommand(cmdOK);
-
form.addCommand(cmdExit);
-
form.setCommandListener(this);
-
}
-
-
public void startApp()
-
{
-
display.setCurrent(form);
-
}
-
-
-
public void pauseApp()
-
{}
-
-
public void destroyApp(boolean flag) {
-
notifyDestroyed();
-
}
-
-
public void commandAction(Command c, Displayable d)
-
{
-
if (c == cmdOK){
-
Retriever ret = new Retriever(this);
-
ret.start();
-
-
} else if (c == cmdExit) {
-
destroyApp(false);
-
}
-
}
-
-
{
-
si.setText(string);
-
}
-
-
Alert alert = new Alert("Alert",message,null,AlertType.WARNING);
-
display.setCurrent(alert,form);
-
}
-
-
-
-
-
}
-
-
-
private Geocoder midlet;
-
Form formRunning;
-
Gauge gauge;
-
-
-
-
public Retriever(Geocoder midlet)
-
{
-
/**
-
* Constructor
-
*
-
* EFFECTS: Initialise the server and store midlet information
-
*
-
* @param midlet The main application midlet
-
* @param server Forecast Server URL
-
*
-
*/
-
this.midlet = midlet;
-
formRunning = new Form("Retrieving Info");
-
formRunning.append(new Gauge("Processing",false,Gauge.INDEFINITE,Gauge.CONTINUOUS_RUNNING));
-
midlet.display.setCurrent(formRunning);
-
-
}
-
-
public void run()
-
{
-
/**
-
* Entry point of the thread
-
*
-
* EFFECTS: call to connect() method
-
*/
-
try {
-
checkLocation();
-
{
-
ex.printStackTrace();
-
midlet.displayString(ex.toString());
-
} finally {
-
-
}
-
-
-
}
-
-
{
-
String string;
-
Location l;
-
LocationProvider lp;
-
Coordinates c;
-
// Set criteria for selecting a location provider:
-
// accurate to 500 meters horizontally
-
Criteria cr= new Criteria();
-
cr.setHorizontalAccuracy(5000);
-
cr.setVerticalAccuracy(5000);
-
-
// Get an instance of the provider
-
lp= LocationProvider.getInstance(cr);
-
-
// Request the location, setting a one-minute timeout
-
l = lp.getLocation(120);
-
c = l.getQualifiedCoordinates();
-
-
if(c != null ) {
-
// Use coordinate information
-
double lat = c.getLatitude();
-
double lon = c.getLongitude();
-
string = "\nLatitude : " + lat + "\nLongitude : " + lon;
-
new GetData(midlet,lat,lon).start();
-
-
} else {
-
string ="Location API failed";
-
}
-
-
formRunning.append("Obtained coordinates...");
-
midlet.displayString(string);
-
}
-
}
-
-
-
Geocoder midlet;
-
double lat, lon;
-
-
public GetData (Geocoder midlet, double lat, double lon) {
-
-
this.lat = lat;
-
this.lon = lon;
-
this.midlet = midlet;
-
-
-
}
-
-
public void commandAction (Command cmd,Displayable disp)
-
{
-
-
}
-
-
public void start() {
-
t.start();
-
}
-
-
-
public void run() {
-
HttpConnection conn=null;
-
InputStream is=null;
-
String sb;
-
-
try {
-
conn = (HttpConnection) Connector.open(sUrl,Connector.READ);
-
if (conn.getResponseCode() == HttpConnection.HTTP_OK) {
-
is = conn.openInputStream();
-
byte buf[] = new byte[128];
-
int total =0;
-
while (total <128) {
-
int count = is.read(buf,total,128-total);
-
if (count<0) {
-
break;
-
}
-
total += count;
-
}
-
-
-
if (sb.length() <10) {
-
midlet.showAlert("Connection error, please try again");
-
is.close();
-
conn.close();
-
-
return;
-
}
-
-
midlet.sili.setText(sb);
-
//midlet.form.append(sb);
-
//vectorized();
-
//midlet.saveCurrency(false,midlet.vector);
-
//midlet.display.setCurrent(midlet.form);
-
} else if (conn.getResponseCode() == HttpConnection.HTTP_NOT_FOUND) {
-
midlet.showAlert("URL not found");
-
-
} else {
-
midlet.showAlert("Server busy or unavailable. Please try again later");
-
}
-
-
midlet.showAlert("Connection failed. You need to authorize this application to access network");
-
midlet.showAlert("Connection failed. Please try again later.");
-
midlet.showAlert(e.toString());
-
e.printStackTrace();
-
//midlet.display.setCurrent(midlet.form);
-
} finally {
-
try {
-
if (is != null) {
-
is.close();
-
}
-
-
if (conn != null) {
-
conn.close();
-
}
-
is =null;
-
conn =null;
-
midlet.display.setCurrent(midlet.form);
-
-
-
}
-
}
-
-
-
{
-
if (s!=null) {
-
int i=0;
-
try {
-
while (true) {
-
int b = (int)s.charAt(i++);
-
if ((b>=0x30 && b<=0x39) || (b>=0x41 && b<=0x5A) || (b>=0x61 && b<=0x7A)) {
-
tmp.append((char)b);
-
}
-
else {
-
tmp.append("%");
-
if (b <= 0xf) tmp.append("0");
-
}
-
}
-
}
-
return tmp.toString();
-
}
-
return null;
-
}
-
}
The code requires mobile device which implements JSR-179 Location API and has been tested on Nokia E71 and 6210 Navigator.
Tags: coordinates, e71, example, geocoder, geocoding, gps, j2me, javame, jsr-179, jsr179, lbs, location-api, locationapi, midlet, midlets, mobile, Nokia, source code, tinygeocoder
I bought a new phone – Nokia E71
I know I've been slacking lately on my post.. but hey, I got myself a new phone - The Nokia E71!
Phones model and features are getting diverse now and I've noticed that its getting harder and harder to choose a phone that really suits my needs. For example, one feature found on Phone A isnt necessarily can be found on Phone B.
So it took me a while to replace my good old 6630 that has been stolen few months before. But hey, I'm back on my feet now.
Among the key feature that attract me to buy this phone are :
- Location API support (JSR-179) with built in GPS receiver
- QWERTY keyboard
- Ease of handling, my hands a bit slippy on its sister's phone E66
- Battery last longer
- Hot swappable micro-sd card
- More than adequate internal memory
- Supports WiFi
\
The only drawback that I could think of this phone is its camera that is not as good as the N95,N96 series phone. But I can still live with that since I rarely use the camera anyway.
Other additional feature
The phone comes with Advance Call Manager and Multi Scanner free of charge, making it easier to filter out unwanted call and to manage phone blacklist.
Multi Scanner allows you to take a photo of name card and automatically store important information (Name, Phone Number, Address, Company's Name, Fax Number) right into the phone.
I hope I can be more productive at updating this blog and producing new mobile applications with this phone.
My Experience with Dopod P800w Pocket PC Phone (GPS)
You might find this review a bit different from other Dopod P800w reviews out there because I decided to concentrate more on Dopod P800w as a development platform rather a general review of the PDA itself.
Dopod P800w is one of the latest Dopod PDA phone products that come with built-in GPS receiver. The device itself comes with Mapking 12 navigation software and maps around the region. Powered with Microsoft Windows Mobile 5.1, the device supports GPS management interface to all GPS-aware application installed on the PDA.
J2ME / JavaME support
The device supports Java mobile application by default through Tao-Group's Intent Midlet Manager which provides MIDP 2.0/CLD C 1.1 application support to Dopod P800w.
List of Pocket PC Freeware Websites
If you happens to be one of Pocket PC PDA owners that runs a variation of Microsoft Windows Mobile operating system, then you might appreciate the website listed below to get tons of Pocket PC based freeware.
In no particular order, they are :
- http://www.pocketpcfreewares.com/
- http://www.freewareppc.com/
- http://www.pdaarchives.com/
- http://www.pdagold.com/
- http://www.freecabs.de/

Most of these applications supports Microsoft Windows Mobile 2003 and Windows Mobile 5.0/6.0 operating system on ARM and XScale processor PDA which means it supports most Pocket PC products by popular vendor like Dopod, O2, HP, HTC and Toshiba
Next post, I'll publish the list of 'must have' freeware application for my Pocket PC PDA phone, so stay tuned.
[tags]pocketpc,pocket pc,pda,wince,windows,freeware,mobile,gadgets,mobile phone[/tags]
Adobe Flash Lite in Mobile Phones
FlashLite is a relatively new product introduced by Adobe that enable the use of Adobe Flash technology and ActionScript on mobile phones. This makes it suitable for authoring multimedia content such as games and leisure applications for mobile devices.
However the major drawbacks of FlashLite is the lack of functionality accessing bluetooth and camera, features that is widely implemented on popular mobile devices.
Flash Lite is available in selected Nokia S60 3rd Edition phone (N77, N76, N75, N73, N80, E70).
Learn more about Adobe Flash Lite from it's official website : http://www.adobe.com/products/flashlite/
You can also download Flash Lite Developers kit from Adobe Flash Lite official website.
Bonus : Adobe has publish a tutorial on how to port J2ME games to Flash Lite.
[tags]flash lite, flash, adobe, mobile, nokia, symbian, j2me, sdk[/tags]
Foundation Platform: Linux Mobile answer to Sun’s JavaME (J2ME)
Watch out! Because Panasonic Mobile Communications, Samsung Electronics, Motorola, NEC, NTT DoCoMo and Vodafone has formed LiMo Foundation which aims to promote Foundation Platform, a Linux-based, open mobile communication device software platform.
The aim of Foundation Platform is similar to Sun JavaME in which it provides a well defined architecture and frameworks that enable software interoperability across Linux mobile devices.
The move probably would not be able to compete JavaME mobile devices directly as the Foundation Profile is only implemented on Linux-based mobile phone.
However the API standardization certainly looks attractive when compared with other proprietary system implementation such as Symbian OS and Windows Mobile based operating system which probably have a much higher licensing fee imposed to mobile phone makers.
[tags]linux, smartphone, pda, j2me, javame, symbian[/tags]