For the last far too long period of time I have been developing a project for university. The goal of which was to evaluate the new Google Android mobile device platform for its suitability to the development of location-based services.
A location-based service - besides sounding remarkably cool - is made up of a program or set of programs which supply the user with information and actions depending on his or her location. It is a comparatively easy to achieve kind of context-awareness. The idea being that if we supply our assistant devices with information about our current environment they ought to be able to filter the information we might want to access and present us with actions we are more likely to take than they would otherwise be. The research community has high hopes for location-based services. Projecting that it will allow major gains in usability, going so far as to make ideas practical, which have so far never come to fruition.
With a whole new player (Android) with powerful backing (Google) entering the mobile arena the question of whether it might be able to stir things up in the location-based service space was intriguing. So I set out to build a location-based service to evaluate the Android platform.
Say you are getting dozens of emails every day. (Reading - as you are - a blog post about an operating system designed to run on a mobile communications device, I'd say this is probably not too far from the truth.) Many of these messages will ask you to do stuff you really cannot be bothered to do right now. A sufficiently advanced and knowledgeable assistant device would be able to filter these messages and present them to you when you are ready to act upon them, when otherwise you'd just become cross. This is obviously an example of a context-aware application. And the information required to fulfill this vision are notoriously hard to come by. So as everybody does, I took a step back and morphed this concept into an application which could work on the subset of context information I might somewhat easily obtain: location and time.
The resulting application is this: A friend of yours sends you a message. She knows she stands a better chance of you getting back to her if you receive the message when you are in the mood and have the opportunity to act upon it. So she annotates the message with a time and place she thinks you might be willing to receive it. Say an invitation for dinner is likely to be interesting to you beginning around 5 in the evening and only if you are at home (ie not working or commuting).
The finished application works. With a little huge problem beyond my control, which I will get to.
Developing on Android
Android is well suited to the development of mobile applications. This is rather important if you want to develop any kind of meaningful location-based service. A location-based service running on your desktop computer might before long turn out to be rather boring.
Android requires that developers design applications differently from traditional environments. And in my opinion (hey, that's what blogs are for) it was a good decision that it does. Android applications are split into a number of comparatively loosely coupled components, which act in concert to produce the "experience" of the product. Saving of data is one component's responsibility, showing one particular view is another, reacting to changes in the environment is a third. Together these components create an application, which is capable of storing data, interacting with the user and reacting to changes in the environment. (If this sounds interesting to you, you should really read the paper.)
These applications are just as powerful as more monolithic ones, but they offer the system a lot more power to manage its components. This way the system can guarantee that applications remain as responsive as possible under resource constraints. Which is rather important in a mobile environment.
Follow the Android
Unfortunately, when I started developing the project the current version of Android was a pre-release. For one this meant that I had to port the project a number of times as the API changed. For another there were a number of bugs, which were not documented, requiring me to debug the project without actually turning up any bugs.
But in hindsight worst of all was that the Google decided to remove built-in XMPP capabilities in one of the last pre-releases. At the beginning of the project it looked as though tight XMPP integration would become a major selling point. So the message transfer mechanism I built the whole baby around of is all XMPP. And when Google decided to drop that technology (for dubious reasons) I was left out in the cold. So no using the application on real devices in the foreseeable future. Sucks? Yeah, big time.
Is Android the sliced bread of location-based services?
As any answer to such a question my results can only be seen as a kind of well-informed opinion. Generally yes. Android provides a number of useful features in the context of location-based services. For one it has built-in location APIs and a maps widget, which is readily available on most devices (by virtue of being a Google-supplied "Optional API"). So if all you are after is a well integrated location system, Android is as good a choice as any. Additionally, being a new platform Android is certainly not any less advanced concerning the technologies which have so far proven to be interesting.
Is that enough to learn a new platform? Frankly, I don't know. Assuming most of the bugs that bothered me so much have been worked out, I think Android should be a pretty nice environment to program in. Designing my project took a few iterations to get right and I think this is probably the largest obstacle facing any newcomer to the Android platform.
The Location-Based Services on the Android Platform paper can be downloaded on my website. My presentations are usually not easy to comprehend without the accompanying talk. And it is in German. But here is the Location-Based Services on Android presentation as well.
I sincerely hope this project is of value to you. If there is any information you'd like me to give you or if you have something for me, please leave a comment.