getLastKnownLocation 返回 NULL
Posted
技术标签:
【中文标题】getLastKnownLocation 返回 NULL【英文标题】:getLastKnownLocation returning NULL 【发布时间】:2013-11-06 11:06:46 【问题描述】:我刚刚开始工作,但是当我关闭 Wifi 以查看是否可以使用 GPS 获得更准确的位置时,它现在给我带来了 NullPointer
错误,我不明白为什么。
下面的代码首先被调用;
public void onConnected(Bundle dataBundle)
connected = true;
//Request an update from the location client to get current Location details
mLocationClient.requestLocationUpdates(mLocationRequest,this);
Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show();
然后需要调用此方法
public void onLocationChanged(android.location.Location location)
// Report to the UI that the location was updated
String msg = "Updated Location: " +
Double.toString(location.getLatitude()) + "," +
Double.toString(location.getLongitude());
if(tmp != location.getLatitude())
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
tmp = location.getLatitude();
您可以看到我在那里有 2 个祝酒词,它们返回的实际 GPS 坐标很好,但是当我调用下面的代码时,它在新的位置行 getLastKnownLocation
上崩溃了
public String getLocation()
// Get the location manager
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
String bestProvider = locationManager.getBestProvider(criteria, false);
android.location.Location location = locationManager.getLastKnownLocation(bestProvider);
Double lat,lon;
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
try
lat = location.getLatitude ();
lon = location.getLongitude ();
Toast.makeText(this,""+lat.toString()+"-"+lon.toString(),Toast.LENGTH_SHORT).show();
return new LatLng(lat, lon).toString();
catch (NullPointerException e)
Toast.makeText(this,"HELL-NO",Toast.LENGTH_SHORT).show();
Log.e("HELL-NO","n",e);
e.printStackTrace();
return null;
我只是不明白为什么当我尝试检索位置时,似乎已在 onLocationChanged
方法中检索到,它只是出现了一个空指针。
【问题讨论】:
你正在为 getLastLocation 混合新的和旧的 api 遵循这个***.com/a/48033659/4997704 【参考方案1】:我只是改变了
locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER) to
locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
这为我解决了解决方案。完成sn-p:
map = ((MapFragment) getFragmentManager().
findFragmentById(R.id.map)).getMap();
map.setMyLocationEnabled(true);
locationManager = (LocationManager)getSystemService
(Context.LOCATION_SERVICE);
getLastLocation = locationManager.getLastKnownLocation
(LocationManager.PASSIVE_PROVIDER);
currentLongitude = getLastLocation.getLongitude();
currentLatitude = getLastLocation.getLatitude();
currentLocation = new LatLng(currentLatitude, currentLongitude);
希望这会有所帮助。
【讨论】:
它对我有用,但 GPS_PROVIDER 和 PASSIVE_PROVIDER 有什么区别? @TroyZuroske 知道为什么被动提供者会解决这个问题吗?对不起撞了。也为我工作,谢谢! 它不起作用.... Location location = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER); Log.d(TAG, "OnRes:lastknown:" + locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER)); Log.d(TAG, "OnRes:lastknown:" + location);在 logcat 中给我 null【参考方案2】:您不应该将新旧位置 API 混合在一起。
要获取最后一个已知位置,您只需拨打电话
mLocationClient.getLastLocation();
一旦连接了定位服务。
了解如何使用新的位置 API
http://developer.android.com/training/location/retrieve-current.html#GetLocation
【讨论】:
干杯@tyczj,不知道有一个“新”API,再次感谢! 此 api 返回设备中已存储的位置?还是在我们调用它时返回实时位置? 文档明确提到“位置可以为空”【参考方案3】:试试这个代码:
LocationManager mLocationManager;
Location myLocation = getLastKnownLocation();
private Location getLastKnownLocation()
mLocationManager = (LocationManager)getApplicationContext().getSystemService(LOCATION_SERVICE);
List<String> providers = mLocationManager.getProviders(true);
Location bestLocation = null;
for (String provider : providers)
Location l = mLocationManager.getLastKnownLocation(provider);
if (l == null)
continue;
if (bestLocation == null || l.getAccuracy() < bestLocation.getAccuracy())
// Found best last known location: %s", l);
bestLocation = l;
return bestLocation;
【讨论】:
【参考方案4】:我在这个问题上挣扎了很长时间。但谷歌刚刚想出了一个解决方案。
googleMap.getMyLocation();
获取 api V2 上蓝点的位置。
【讨论】:
以上是关于getLastKnownLocation 返回 NULL的主要内容,如果未能解决你的问题,请参考以下文章
getLastKnownLocation() 返回 null [关闭]
Android getlastknownlocation 返回 null
LocationManager.getLastKnownLocation() 返回 null,并且永远不会调用 onLocationChanged
LocationManager 在 Android 中使用 getLastKnownLocation 返回空经度
getLastKnownLocation() 总是返回 null,所有提供者都是 DummyLocationProvider