在Android设备上禁用蜂窝网络通信

时间:2011-10-30 16:48:46

标签: android geolocation

我正在为我的移动计算课写一篇研究论文,它将根据经验比较GPS接收机的水平和垂直位置精度,Wi-Fi三角测量和Droid BIONIC上的蜂窝塔三角测量与已知的测量级GPS测量。为了实现这一点,我需要彼此隔离地测试每种方法,而不是它们一起工作以确定位置。有没有办法以编程方式禁用网络连接?我查看了android.location包中的Criteria class,但顾名思义就是这些:“标准”。我没有在API文档中找到任何可以让我明确指定在确定地理位置时使用哪个提供程序的内容,也没有在Google搜索中找到任何算法。

编辑:是否像在LocationProvider class中为以下方法提供真值或假值一样简单?

requiresCell()
requiresNetwork()
requiresSatellite()

2 个答案:

答案 0 :(得分:1)

我认为最接近的是LocationManager.GPS_PROVIDERLocationManager.NETWORK_PROVIDER或两者。您可以将这些标记作为过滤器提供给LocationManager的{​​{1}}。

尝试实施requestLocationUpdates()的{​​{1}} / LocationListener,看看您是否可以在WiFi和Cell Tower之间进一步过滤。

修改:您可以取出SIM卡并仅使用WiFi来确定位置,反之亦然(禁用WiFi)以强制使用这些塔。

答案 1 :(得分:0)

从技术上讲,这不是以编程方式选择提供程序,但在我的DROID X上,我可以执行以下步骤来禁用通过网络传输的数据:

设置>电池和数据管理器>数据传递>数据启用/背景数据

我应该能够将此技术与LocationManager.NETWORK_PROVIDER(以及希望DROID Bionic)结合使用,以隔离蜂窝网络和WiFi。我会让你们都知道它是如何运作的。

<强>更新

对于那些感兴趣的人,即使在我的论文完成后,我也已经进行了数小时的研究。这还没有经过测试,但是根据我从文档中收集到的内容,可以通过使用ConnectivityManager包中的android.net类以编程方式在网络提供者之间切换。此外,可以通过WifiManager包中的android.net.wifi类以更多方式操纵WiFi。

我没有机会将这些方法中的任何一种合并到也使用android.location包的应用程序中。但是,我不认为在使用上述两个类的方法来切换您想要的提供程序的某些功能时,这将是一个延伸。然后调用此方法时:

requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener) 

其中提供程序是NETWORK_PROVIDER变量,变量将自动承担事先切换的提供程序。