Android NETWORK_PROVIDER位置

时间:2013-05-29 10:21:25

标签: android networking location

使用NETWORK_PROVIDDER获取当前位置时遇到的问题很少。

我的代码如下所示:

LocationManager lMgr = (LocationManager) context
    .getSystemService(Context.LOCATION_SERVICE);
boolean isNetworkProviderEnabled = lMgr
    .isProviderEnabled(LocationManager.NETWORK_PROVIDER);

Location location = lMgr.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
    // deal somehow with last (very likely outdated location)
}

if (isNetworkProviderEnabled) {
    lMgr.requestLocationUpdates(provider, 0, 0, locationListener);
}

当然我有MyLocationListener来处理位置变化,并且所有必需的权限都被添加到清除

问题是,在某些手机上,这段代码就像魅力一样,但另外一个,“requestLocationUpdates”完全没有。当然,对于那些有问题的手机,当我打开Goog​​le地图应用程序时,我的当前位置会立即显示。所以我的问题是(我相信谷歌的人应该回答这个问题):谷歌地图如何立即检索当前位置,而其他应用程序没有这样做?我的代码错了吗?当然,我在许多stackoverflow问题中看到过这样的代码。如果有人想知道,这种问题出现在一些三星Galaxy Nexus S手机上

在我的应用程序中,GPS不用于节省电池电量,但启用了位置服务。

2 个答案:

答案 0 :(得分:0)

我最近遇到了同样的问题,LocationManager是错误的,并没有完全在三星手机上实现。他们也消耗了很多力量。使用LocationClient解决这两个问题。 LocationClient使用所有可用的方法来获取最后一个位置,因此它是所有提供商和传感器的超级集合。

我遇到了三星Y型手机的问题,我想知道你在谈论哪些手机。为了解决三星手机的问题,我用手机启动了GPS手机

HomeScreen.getLocationManager().requestLocationUpdates(
    LocationManager.NETWORK_PROVIDER, 0, 0, new LocationListener() {
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
        }
        @Override
        public void onProviderEnabled(String provider) {
        }
        @Override
        public void onProviderDisabled(String provider) {
        }
        @Override
        public void onLocationChanged(final Location location) {
        }
    });

然后调用LocationManager.getLastKnownLocation或新的locationClient.getLastLocation api。

  1. 首先,只需在getLastKnownLocation上添加以上行。事情应该神奇地开始运作
  2. 如果您有更多时间并再次测试,请迁移到LocationClient。如果失败,请使用上面的魔法让它工作。

答案 1 :(得分:0)

有时设备不会收到任何位置更新,GPS_PROVIDER和NETWORK_PROVIDER会返回null。

尝试重新启动设备,这个技巧帮助了我。我的代码非常好,但提供商返回null。