在执行HTTP请求之前检查移动数据连接/信号

时间:2013-01-17 11:38:25

标签: android geolocation gps gsm

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

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

  

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

获取用户区域设置后,我将另一个HTTP请求发送到free.worldweatheronline.com的weather API并解析返回的XML。通过稳定的互联网连接,应用程序运行良好,但我的房子有垃圾信号和更糟糕的移动数据连接。

我知道有一种简单的方法可以检查设备是否有移动数据连接,但我想知道的是,当连接出现问题时,是否有办法测量信号强度,但是成功运行太糟糕了。例如,如果有办法获得移动数据信号强度从0(无信号)返回到100(完整信号)的值,那么我只能在信号强度超过一定量的情况下执行位置和天气检索。

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

提前致谢!

2 个答案:

答案 0 :(得分:1)

您可以通过创建PhoneStateListener并处理onSignalStrengthChanged回调来检查单元服务信号强度。有关详细信息,请查看此问题How to get cell service signal strength in Android?

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

答案 1 :(得分:1)

你可以检查它,但记得在任何情况下都要处理连接丢失。

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

如果您可以轻松检查信号强度,我会同时进行。

看一下SignalStrength类(从未使用它btw)。 Here一个很好的解释。