Handling Optional APIs in J2ME

2019-05-18 12:53发布

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!

2条回答
Animai°情兽
2楼-- · 2019-05-18 13:14

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:

Class loaders (see below) can opt to load a type early in anticipation of eventual use. If this strategy is chosen, the class loader must not report any problem (by throwing a subclass of java.lang.LinkageError) encountered during loading until the type's first active use.

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.

查看更多
迷人小祖宗
3楼-- · 2019-05-18 13:22

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.

查看更多
登录 后发表回答