1

在我的 Android 应用程序中,我首先使用 GPS、GSM 网络或通过设置屏幕手动输入的文本值来获取用户位置。

起初我使用 Geocoder 类来获取 GPS 或 GS​​M 提供的经纬度的用户区域设置,但它似乎不可靠,现在我使用 Google 的 Web API 通过发出 HTTP 请求并解析返回的 XML 文档来获取区域设置。这是使用以下 URL:

http://maps.googleapis.com/maps/api/geocode/xmllatlng=blahblahlat,blahblahlong&sensor=true

获取用户区域设置后,我向 free.worldweatheronline.com 的天气 API 发送另一个 HTTP 请求并解析返回的 XML。在稳定的互联网连接下,应用程序运行良好,但我家的信号很垃圾,移动数据连接更差。

我知道有一种简单的方法可以检查设备是否具有移动数据连接,但是我想知道的是,当有连接时出现问题时,是否有一种方法可以测量信号强度,但它也是不好成功运行。例如,如果有一种方法可以获取从 0(无信号)到 100(满信号)的值的移动数据信号强度,那么我只能在信号强度高于一定量时进行位置和天气检索.

最好只用 try/catch 包围位置和天气检索代码,这样它就不会导致运行时异常,让它优雅地失败,然后在获得更好的信号时更新?关于如何实现这一点的任何想法,或任何其他建议以使我的应用程序对信号不佳的用户更友好?

提前致谢!

4

2 回答 2

1

您可以通过创建 PhoneStateListener 并处理 onSignalStrengthChanged 回调来检查小区服务信号强度。有关更多信息,请查看此问题如何在 Android 中获取手机服务信号强度?

编辑: 您可以PhoneStateListener通过调用 telephony.listen(listener, PhoneStateListener.LISTEN_NONE); 在您不需要更新时不接收更新。

于 2013-01-17T12:07:28.873 回答
1

您可以检查它,但请记住在任何情况下处理连接断开。

在我的应用程序中,我在使用打开的连接编写文件或类似的东西时遇到了一些问题,所以请记住,失败可能总是会发生(例如从 gprs 切换到 wifi)。

如果您可以轻松检查信号强度,我会两者兼而有之。

看一下SignalStrength类(顺便说一句,从未使用过)。这里有一个很好的解释。

于 2013-01-17T12:16:12.567 回答