J2ME / MIDP - 如何检测连接类型(2G / 3G / 4G / Wi-Fi)?

5
我在网络上看到了很多次这个问题,但似乎没有一个全面的答案。
我创建了一个 J2ME 应用程序,需要检测网络连接类型(以便在通过 Wi-Fi 连接时连接到不同的资源)。
有一个答案适用于 Nokia 设备 here ,还有一个答案适用于 BlackBerry 设备 here ,但我还在开发以下设备的应用程序:
- 华为 - Tecno - 三星 - 摩托罗拉 - LG
对于其他设备制造商是否有相当的属性等价于 Nokia 解决方案中的 System.getProperty("com.nokia.network.access"),有人知道吗?

如果使用System.getProperty()无法确定连接类型,则可能的替代方法之一是在服务器端检测设备的IP地址-请参见http://www.javameblog.com/2007/12/how-to-get-ip-address-of-mobile-using.html-但您需要知道哪些IP地址范围对应于哪些移动网络运营商(这可能会随时间而变化,因此更适合在服务器端执行所有操作并仅向移动设备报告是否正在使用移动连接-然后移动设备可以根据需要使用该连接信息)。 - ban-geoengineering
MIDP没有API来做那件事,这是确定的。诺基亚可能会通过系统属性提供一些“黑科技”,而大多数其他供应商则不会,也没有标准。即使对于MIDP,J2ME也很难提供一致的行为,那么你还能期望额外的东西吗? - Mixaz
1个回答

0

我认为你对MIDP的期望值可能过高了。

正如你所意识到的那样,使用标准的JavaME API无法获取连接类型,因此你需要依赖不同品牌的专业选项,就像你已经发现的那样。

你可能需要寻找替代方案。如果你能明确说明你想做什么,也许有一些其他聪明的“技巧”可以帮助你。

如果我理解正确,你想在使用GPRS/3G连接时连接到WAN IP,在使用Wi-Fi连接时连接到LAN IP?

在这种情况下,如果是我,我会确保LAN IP是静态的,然后总是尝试首先到达它。如果你使用Wi-Fi连接,你将能够到达它。如果没有,它将无法到达,然后你可以继续到达WAN IP地址。


除了诺基亚的专有解决方案之外,可能还存在其他专有解决方案,因此希望其他开发人员能提供相关信息。需要进行检测以便在移动连接时加载特定于移动运营商的内容,否则(对于 Wi-Fi 连接)加载其他静态内容 - 因此我认为您的建议不适合我。 - ban-geoengineering
三星可能会像诺基亚一样拥有系统属性,但通常只有诺基亚实现并添加到规范中。因此,如果您找到其他平台的解决方案,我会非常惊讶。虽然我也很好奇,但不幸的是我认为这是不可能的。 - mr_lou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接