安卓定位错误

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 放在那里

【讨论】:

以上是关于安卓定位错误的主要内容,如果未能解决你的问题,请参考以下文章

离子应用程序的地理定位错误在浏览器上有效,但在安卓手机上无效

安卓开发,百度地图

在三星安卓浏览器上启用真正的固定定位

安卓全球定位系统。位置侦听器不想获得修复:(

安卓手机怎么修改定位城市?

安卓手机怎么设置定位?