I’ve spent the last 10 years doing web development and little else. This year, I’ve vowed to get more experience outside of web development. After hearing some of the cool stuff happening in the mobile space, I decided I’d like to do some mobile programming. There are tons of cool applications for this that I felt I could use in everyday life, somewhat unlike web development. For example, why not use the positioning capabilities that most new cellphones have to make some cool integration with Google Maps on my cellphone? Why not use the same software to let friends know where I am so we can find each other easier when we are meeting somewhere? Or, perhaps I can use the Bluetooth capabilities to integrate with a home automation system.

With all these possibilities and more, I’d wondered why there weren’t more tools along those lines instead of the mass of silly games, wallpapers, ringtones, and other stupid things. Well, after trying out J2ME programming, I now know why.

I started out looking for a phone with decent Java capability. Mostly, I was interested in JSR 179 (location services) and JSR 82 (Bluetooth) APIs. I found the Nokia N75, which according to the website does support those APIs and more. I stopped at the Cingular store on the way home and picked one up after work. I got home and downloaded NetBeans & the NetBeans Mobility pack for J2ME. I found that using the location API was very easy (a simple output of coordinates took only a few lines of code) and had a small J2ME app running on the emulator in no time.

I transferred it to my phone and immediately got a LocationException. Several hours of searching led me to developer documentation from Cingular. As it turns out, most of the APIs are disabled or severely restricted. For example, Bluetooth (JSR 82) is only allowed if you have a Cingular Premium cert, which is confusing to even understand how to get in the first place, but it appears you have to be an enterprise partner already and pay $1,000 to have Cingular test your app. Location services (JSR 179) are disabled altogether. PIM, SMS, and internet connectivity services are also heavily restricted, with most things requiring at least a 3rd party cert ($500 or so per year) to use.

Cingular claims this is for safety and privacy reasons, which I can understand to an extent. However, why can’t I, as a seasoned developer, manage those settings on my own phone? Why can’t I choose to allow programs that I’ve written have access to Bluetooth services or location services? In the end, these onerous requirements make it virtually impossible for hobbyists and enthusiasts take advantage of all the JSRs that the phone itself fully supports. It is extremely frustrating that the technology needed for us to do some cool things with mobile devices is there, but we can’t use it simply because Cingular has chosen to make such functionality unavailable. Unfortunately, some research shows that most US carriers have restrictions similar to Cingular’s.

Ultimately, this is less about the safety and privacy of Cingular’s customers and more about the safety of Cingular’s revenue. By limiting who can access the features of the phone, they can make sure they get their cut. This, unfortunately, leads to the dearth of really useful mobile applications we see now. If you want to spend $5 on a dumb little game or $2 for a ring tone, though, you are set.