是否可以使用 J2ME 编写移动应用程序,并且每当我们想要实现 J2ME 不提供的功能时调用本地移动 API?(有点像 .NET 所做的,每当您需要未提供的东西时,您只需从 .NET 平台调用 Win32 API)。
4 回答
虽然 J2ME 中没有正式支持 JNI,但 J2ME 的 Symbian 实现显然使用了非常相似的东西。
由于大多数 J2ME API 都有相应的 Symbian OS C++ API,Symbian 所做的(很多)是在两者之间开发适配层。
在这与 IBM J9 虚拟机的新模块化架构(从 Series60 第 3 版功能包 2 起)之间,技术上可以向虚拟机添加新的 API,而实际上不需要重新编译大部分手机固件。
但是,如果没有手机制造商的大力帮助,第三方开发商根本不允许这样做。
环回套接字连接是人们通常实现的跨语言障碍传输数据的解决方案。但是,大规模部署并不是最简单的任务,因为从技术上讲,您需要在设备上安装 2 个应用程序。一旦您了解了 Symbian J2ME 实现的线程模型,您就会意识到它是多么丑陋和低效。
当您遇到此类问题时,就该学习 Symbian OS C++ 并正确处理了。
不,这在 Java ME 中是不可能的。
只是一种。实际上这是可能的,但不是直接的。您可以编写一个本地服务器来侦听本地套接字并从您的 Java MIDlet 向它发送请求。甚至有人发布了一个名为 MIDP-JNI 的框架来执行此操作(而不是真正的 JNI)。显然,解决方案的形式对您可以用它做什么有一些限制,但实际上并非不可能。
请注意,使用这种方法会使您的应用程序调试起来更加复杂。
如果您特别关注诺基亚/塞班,那么 APIBridge http://wiki.forum.nokia.com/index.php/J2ME_API_Bridge_Interface可能是一个解决方案。通常它是“本地套接字上的本机服务器”之类的“官方”版本。APIBridge 是“可扩展的”,您可以为合适的“低级”任务编写自己的“插件”。