安卓定位错误
Posted
技术标签:
【中文标题】安卓定位错误【英文标题】:Android Location Error 【发布时间】:2011-02-12 06:13:57 【问题描述】:我用几行代码将我的问题挑出来
lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L, 5.0f, this);
lat = location.getLatitude();
lng = location.getLongitude();
//lat = new Double(40.431682);
//lng = new Double(-74.2021819);
pLocation = new GeoPoint((int)(lat * 1000000), (int)(lng * 1000000));
如果您想知道,我的 onLocationChanged
public void onLocationChanged(Location location)
if (location != null)
lat = location.getLatitude();
lng = location.getLongitude();
pLocation = new GeoPoint((int)(lat * 1000000), (int)(lng * 1000000));
如果我尝试获取 LastKnownLocation,我的应用程序会崩溃
但如果我手动输入位置,它会正常工作
我现在不知道出了什么问题
【问题讨论】:
【参考方案1】:首先,当您遇到崩溃时,请使用adb logcat
、DDMS 或 Eclipse 中的 DDMS 透视图来获取与崩溃相关的 Java 堆栈跟踪。在这种情况下,我怀疑您在尝试使用 location
对象时会发现您有一个 NullPointerException
。
在调用requestLocationUpdates()
之后,您才能使用getLastKnownLocation()
,尤其是对于GPS。 GPS 可能需要几十秒才能开始提供修复。
请更改您的代码以消除您对getLastKnownLocation()
的使用,并仅使用您的onLocationChanged()
方法中需要该位置的逻辑。至少,寻找 null
location
对象,不要尝试使用它。
【讨论】:
感谢您的到来!我自己发布后不久就修复了它【参考方案2】:我的解决方法基本上是只使用粗略的位置。
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
String bestProvider = lm.getBestProvider(criteria, true);
Location loc = lm.getLastKnownLocation(bestProvider);
lat = loc.getLatitude();
lng = loc.getLongitude();
【讨论】:
【参考方案3】:这可能是因为您的设备上未启用精确定位 (GPS)。或者您的清单中未指定 ACCESS_FINE_LOCATION 权限。
【讨论】:
【参考方案4】:我敢打赌,如果您进行调试,您会看到空异常。之所以会发生这种情况,是因为您试图从尚未修复的位置提取纬度和经度。用 if (loc!=null) 包围这个提取,并把 progressDialog 放在那里
【讨论】:
以上是关于安卓定位错误的主要内容,如果未能解决你的问题,请参考以下文章