Monday, November 23, 2009

FollowMe 1.2 - Free Java ME GPS Tracking Software


FollowMe 1.2 Free Open Source GPS tracking software for MIDP 2.0+ phones

FollowMe is the new name for Silent Software's LocateMe, this small (45K) application requires a mobile phone with an integrated GPS or a separate Bluetooth GPS and will show you the direction to given locations ("targets") without maps, using a pulsing direction arrow. You can request the location of other FollowMe users by text message, send your own position, or just simply save locations ("targets") for directions back to them later. Targets can even later be imported into Google Earth or Maps.

The Features
  • "Target" other FollowMe users' positions via a text message
  • Save multiple locations (targets "waypoints") with names (NEW for 1.2)
  • Stores your targets as Google Earth/Maps KML (NEW for 1.2)
  • Send your current position to other FollowMe users via text message
  • Connects to any mobile phone integrated GPS or Bluetooth GPS
  • View all the satellites around you on a "radar" style view
  • Display RAW GPS data (suitable for testing)
  • Complete integrated GPS support (some features may not be available depending on phone GPS capability).

For developers the fully commented source code provides
  • Design patterns, i.e. lazy initialization, command, strategy patterns
  • An example of a 2 tier system
  • How to use PushRegistry and File Connector (JSR 118)
  • How to use the Record Store (JSR 118)
  • How to use Bluetooth (JSR 82)
  • How to use Text Messaging (JSR 120)
  • How to use the PIM (and hack to minimise the security notices - JSR 75)
  • How to use the Location Based API (JSR 179 - Nokia lapi.jar included for use on non GPS integrated phones)
  • How to use simple graphics (not using a Game Canvas however)
  • How to multi thread effectively
  • How to process raw NMEA GPS data
  • Basic usage of the NanoXML parser
  • Basic understanding of graphical and GPS trigonometry

Known Issues
  • The application is not security signed (this costs money!), so you will be shown numerous security popups when you start it.
  • As your phone is not a compass the direction target arrow will only point to the correct direction once you start walking, and the phone can determine which way relative to North you are going, i.e. when you are stood still your phone doesn't know which direction you are facing! :) On startup, until the GPS gets an accurate fix, the direction arrow to the target WILL NOT BE SHOWN.
  • On first run there can be some delay discovering the Bluetooth devices in busy areas (i.e. it may display "Waiting for GPS..." on first run for some time). This is down to the Bluetooth device discovery picking up a large number of devices and querying them. Once you have located your GPS, future connections to the GPS do not require this discovery period and will be relatively quick.

Compatibility
This software has been tested on Nokia Series 40 3rd edition phones at a minimum resolution of 128x128 pixels and Sun WTK emulator at 240x320. It has also been successfully tested on a Nokia N95 and Nokia 6650 with integrated GPS', and the INQ1 phone with separate Bluetooth GPS.

Downloads
Download for mobile phones with an integrated GPS
Download for mobile phones using a separate Bluetooth GPS
Download FollowMe source code (and full javadoc)

18 comments:

Anonymous said...

Hello, I'm from Indonesia...
I just download your followme, and that was good...
It help my final exam...

but if i try in Eclipse Pulsar why a lot of errors???
can you explain to me???

thank's before...
sorry, my english is not good...
:)

Benjamin said...

Sorry I've not loaded this in Eclipse Pulsar - I've only ever used it with an old version of Eclipse (Europa I think) with the J2ME WTK plugin. Do students on your course use this as a standard example (i.e. part of the syllabus, recommended by your teacher)? If this is true, I might be willing to spend more time on it (FollowMe is quite old now).

Thanks,

Benjamin

P.S. I suspect the errors may be because of the version of compiler in use (it is not JavaME)?

Anonymous said...

so it was opened with Eclipse not Eclipse Pulsar...
sorry, I just Understand...
HeHe...

if FollowMe old, what's new???

thank's before...

Benjamin said...

It was Eclipse + EclipseME plugin (i.e. before Eclipse Pulsar came about). I'll update the source project at some point but it shouldn't be that hard to do. Only new Java code I really have is Image to ZX Spec and FreeKicker which are fairly specialised pieces of software 8P

Anonymous said...

last question...

can this application send automatically sms based on the time we want???
if can, how???

thank's again...

Anonymous said...

Hello, thank you for the code
I want to use two phones that have integrated gps ;
i want to use your code to target another mobiles (I use the Bluetooth connection between the mobiles)
can you help me??
thank you

Benjamin said...

To anonymous:

Bluetooth is short range - you'd be able to see the other person so no need to target them :)

Felipe said...

Benjamin,
In one link, you packaged the lapi.jar, and the other don't. Does the link with lapi.jar fully work on devices without the jsr-179? I mean, if I install on a non enabled gps device, WITHOUT the jsr 179, will it work? will it be able to provide it's own location via cell ID for example, without the use of an external bluetooth gps?
TO be honest I never heard of packaging the lapi.jar, to be run on devices without the jsr-179...I would like very much to learn from your experience....FCavalcanti

Benjamin said...

Felipe you are correct. The integrated GPS download is intended for phones already with JSR-179 (since they have a GPS they will also have this JSR). The version for use with a separate Bluetooth GPS is bundled with lapi.jar because any phone that does not have a GPS will also not have JSR-179. Have a look at http://mirror.viperfang.net/silentdevelopments/javadoc/followme/uk/co/silentsoftware/reader/package-summary.html for how it switches between 2 implementations of a GPSReader, one that uses the Bluetooth API, the other the phone's built-in JSR-179 LocationListener.
Currently the above are the only 2 implementations but adding your own is very simple - you just implement the 2 methods in GPSReader interface and read the coordinates from another CellID API and "push" the coordinate's raw NMEA data or Location object to the method FollowMe.pushDataToView(...) which would process/display it.

Benjamin

Felipe said...

hummm....sweet ;)
Very interesting code actually. Very well written, easy to understand. Implementing the GpsReader interf. and everything....but, how do you package the lapi.jar? I talked around, and nobody ever heard of packaging it...plus, I tested some phones without integrated GPS, but with the jsr 179 (nokia e63 example) and was able to use it's location...But simply the idea of packaging the lapi.jar for cellphones wihout the jsr 179 by factory (like Nokia 5130 XpressMusic)...I havent test your code (the one that packages the lapi.jar) on a cellphone without jsr 179.... But, I assume you have, right? If so...how do you package the lapi.jar? Really, I talked around (I live in RIo de Janeiro, BRazil) nobody ever heard of such a technique ;)

Benjamin said...

Felipe: Obfuscate the compiled code. JavaME can't tell then is the namespace conflicts allowing you to install it.

Felipe said...

sorry for all this questions, but it has been really interesting... So, you just compile the lapi classes with the rest of the j2me code, and then obfuscate the compiled code?
Really? Very interesting brother...plus, I will make some tests on some devices, and will then update here about the results... ;)
but honestly, thank you for everything already... when my app is available, I'll post it here too...

Anonymous said...

Hi there!
First I want to thank you for sharing this.

I'm new to all this thing, so I have some basic questions that I need answers for desperately.

Your FollowMe.jar is only 39kb in size, but when i downloaded the source code and built it without making changes the file became 67kb in size. Further more, when I deploy the 67kb file to my nokia e71 it tells me that it's not compatible with the phone were as your original 39kb file installed fine.

I'm using the latest version of Eclipse with EclipseME plugin and the Wireless Toolkit from Sun (2.5.2)

The file runs fine in the emulator, but doesn't install when i move to the phone..

Any help is appreciated, thank you very much

Benjamin said...

Sounds like you built it with lapi. See above comments.

Benjamin

Anonymous said...

Hi again, thanks for replying.

TBH I didn't really understand the comments above.

When you say "built with lapi", do you mean that it was included in the source already? I didn't include the jar file when I was deploying.

Benjamin said...

Both of the download binaries are obfuscated. The version without lapi does not need to be obfuscated (I just built it that way*). Obfuscation prevents the lapi.jar from being recognised as part of the core Java libraries (which ordinarily would not be allowed to install on the phone). *Ofbuscation will also make the file smaller - 67K is the correct size if you do not obfuscate the non-lapi version. You can obfuscate the code using Pulsar's "Create Obfuscated Package" option. Note that FollowME is now quite old and on modern touch screen phones it adds extra touch controls and "A B C D" options which doesn't look very good (there is probably a way to disable this). On my Nokia 5230 it also does not show anything in the Satellites or Data View if using the integrated GPS. There is probably a way to fix this - I think I may have missed something in the location api (i.e find out why it isn't reading satellite ephermeris). Using a Bluetooth GPS will still show Satellites and raw data information due to actually needing to deal with raw NMEA Strings and not Location objects (lapi).

If you find out anything interesting please let me know!

Hope this helps,

Benjamin

suhvan said...

Hello, Benjamin.

I've got problem with launching your application( No Class Def Found Error javax/microedition/location/LocationListener) I'm trying to include lapi.jar to build path and also obfuscate binaries code but it doesn't helps.

Benjamin said...

"No Class Def Found Error javax/microedition/location/LocationListener" suggests that the code is NOT obfuscated, if it was an error with obfuscated code it would say something like
"No Class Def Found Error a/bb/cc/ddd".

Hope that helps.