Android系统。如何知道检测到的位置是来自GPS还是网络提供商

时间:2013-03-10 11:56:01

标签: android gps position location-provider

我正在尝试实施一个应用程序,它可以感知GPS和网络提供商的位置并在Google地图上显示。我成功地做到了这一点,但我有一个问题: 我在我的Activity的onCreate()中获取了提供者(它扩展了LocationListener)

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
provider = locationManager.getBestProvider(criteria, false);
location = locationManager.getLastKnownLocation(provider);

它工作正常,我的问题是当调用onLocationChange()时,如果调用它的提供者是GPS或NETWORK,我应该采取不同的行动。有没有办法知道哪个? 更清楚:

调用onLocationChanged(Location location)时,是否有机会知道哪个提供商拨打了电话?我尝试在提供程序字符串上使用if,但似乎它不起作用。

4 个答案:

答案 0 :(得分:1)

您是否需要了解位置提供商(GPS,WIFI或网络)或其准确性?

  

getAccuracy()

     

获取此位置的估计精确度,以米为单位。

     

我们将准确度定义为68%置信度的半径。换句话说,如果您绘制一个以此位置的纬度和经度为中心的圆,并且半径等于精度,那么真实位置在圆内的概率为68%。

如果您真的关心提供者,可以使用isProviderEnabled()

答案 1 :(得分:1)

检查准确度是否<= 30m:

boolean isGPS = (location.getAccuracy() <= 30);

答案 2 :(得分:0)

我想您想知道哪个提供商提供了最后一次位置更新.....

你已经将Provider创建为字符串,只需在代码中使用该字符串即可 if(provider.matches(&#34; GPS&#34;)){}

答案 3 :(得分:0)

我看到了几个答案,尽管它们可能有用,但没有一个能解决实际问题:

  

当调用onLocationChanged(位置位置)时,是否有机会知道哪个提供商进行了呼叫?

要知道触发GPS_PROVIDER NETWORK_PROVIDERonLocationChanged还是getProvider(),您可以使用provider方法(或Kotlin中的@Override public void onLocationChanged(Location location){ //obtain a string, 'gps' or 'network', from the location System.out.println(location.getProvider()); } 值) :

override fun onLocationChanged(location: Location?) {
    println(location!!.provider)     
}

或者在Kotlin:

    def logfiles(self):

    look_for = ['network', 'skip', 'remove', 'jitter', 'loss', 'diff']
    analyze = self.open_logs('logfile-1.log')
    result = []

    for i in analyze:
        i = i.strip()

        if any(search in i for search in look_for):
            result.append(i)

    return result

文档参考here