What is the right way of working with optional APIs in Java Mobile?
- Does one need to make different versions of their app?
- Or is it enough to check APIs availability at runtime using
System.getProperty()
?
Let's say I'd like my app to support JSR-256 (the Sensor API). Would importing classes from javax.microedition.sensor
and registering variables of these types break my app if the device doesn't support it?
I am sure there must be a pretty standard way of handling that situation.
Thanks!
There are two ways of determining what APIs are supported. If you are going to take the system property route, look at the list here. Classes can also be used, although you have to be careful. The harder question is ensuring that classes don't get loaded:
The article linked to by Albus has the following quote:
So, if the class isn't actually used at runtime, then you shouldn't run into any errors. Of course, Java ME has many implementations and I'm not sure whether it is safe to trust them all to implement it correctly.
You can use system properties, or Class.forName() to see if the API is available. Just make sure classes using those APIs don't get loaded on handsets that don't support them. You can make one version of your midlet that supports many different handsets.