【问题标题】:Check mobile data connection/signal before doing HTTP request在进行 HTTP 请求之前检查移动数据连接/信号
【发布时间】:2013-01-17 11:38:24
【问题描述】:

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

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

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

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

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

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

提前致谢!

【问题讨论】:

    标签: android geolocation gps gsm


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 所以你建议做一个信号强度测试,并捕捉任何异常以防万一?
    • 是的,完全正确。那是因为在信号强度足够的情况下,您也可能会失去连接。您应该对您的设备进行一些测试,并在交换数据时断开连接(只需使用小部件关闭 3G)。
    【解决方案2】:

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

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

    【讨论】:

    • 你建议我如何使用它。当我需要获取位置或天气(10 分钟以上的间隔)时,我应该注册监听器,获取强度然后取消注册吗?或者我会在应用程序启动时注册侦听器并在 onSignalStrengthChanged() 方法中检查强度设置一个布尔变量,然后检查我的服务调用以获取位置和天气?还是我在这里完全错误的页面?
    • @WilliamStewart 我相信您应该决定哪种信号强度对您来说足够,然后在您的应用程序启动时注册 PhoneStateListener 并在 onSignalStrengthChanged() 方法中检查您的信号强度。然后也许就像你说的那样存储在信号强度的静态布尔变量状态中,你可以在需要发送 HTTP 请求时检查它。
    • 我已经测试了 PhoneStateListener 并且它工作正常,我唯一的问题是 onSignalStrengthsChanged 方法被非常频繁地调用,对于我想每 10 分钟执行一次的事情,保持监听器似乎效率很低挂号的。有没有你知道的一次性信号抓取方法?
    • @WilliamStewart 您可以通过暂停PhoneStateListenertelephony.listen(listener, PhoneStateListener.LISTEN_NONE); 来限制调用onSignalStrengthsChanged 方法的频率。你可以用Timer安排它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    相关资源
    最近更新 更多