使用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”完全没有。当然,对于那些有问题的手机,当我打开Google地图应用程序时,我的当前位置会立即显示。所以我的问题是(我相信谷歌的人应该回答这个问题):谷歌地图如何立即检索当前位置,而其他应用程序没有这样做?我的代码错了吗?当然,我在许多stackoverflow问题中看到过这样的代码。如果有人想知道,这种问题出现在一些三星Galaxy Nexus S手机上
在我的应用程序中,GPS不用于节省电池电量,但启用了位置服务。
答案 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 :(得分:0)
有时设备不会收到任何位置更新,GPS_PROVIDER和NETWORK_PROVIDER会返回null。
尝试重新启动设备,这个技巧帮助了我。我的代码非常好,但提供商返回null。