1

我在使用 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”完全没有任何作用。当然,在那些有问题的手机上,当我打开谷歌地图应用程序时,我的当前位置会立即出现。所以我的问题是(我相信谷歌的人应该回答这个问题):谷歌地图如何立即检索当前位置,而其他应用程序却没有?我的代码错了吗?当然,我在许多 stackoverflow 问题中都看到过这样的代码。如果有人想知道,这种问题出现在一些三星 Galaxy Nexus S 手机上

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

4

2 回答 2

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.getLastKnownLocationOR 新的locationClient.getLastLocationapi。

  1. 首先,只需在您的 getLastKnownLocation 上添加以上行。事情应该神奇地开始运作
  2. 当您有更多时间时迁移到 LocationClient 并再次测试。如果失败,请使用上面的魔法使其正常工作。
于 2013-05-29T10:28:43.490 回答
0

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

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

于 2013-05-29T11:13:54.803 回答