我无法获取LocationListener来调用手机上的onLocationChanged()回调。当我在模拟器中运行我的代码时,它工作正常,每次进行地理修复时都会调用回调。
当我在手机上运行应用程序时,什么都没发生。永远不会调用回调。我在我的设置中通过GPS和无线启用了位置。该应用程序具有位置权限的所有使用权限。
此外,当我在LocationManager对象上调用getLastKnownLocation()时,我的应用程序崩溃了。 (仍然,只在我的愚蠢手机上)。即使我试图捕获导致它崩溃的异常,它仍然只是崩溃,所以我甚至无法得到任何导致它崩溃的信息。这非常令人沮丧。
LocationManager.getBestProvider()正在返回GPS,当我打开谷歌地图时,它立即找到我的位置。到底发生了什么事?有什么办法可以弄明白为什么它会在手机上崩溃吗?
private void setupLocListener(){
Criteria c = new Criteria();
c.setAccuracy(Criteria.ACCURACY_FINE);
c.setAltitudeRequired(false);
c.setBearingRequired(false);
c.setSpeedRequired(false);
c.setCostAllowed(false);
lm.requestLocationUpdates(lm.getBestProvider(c,true), 0, 0, new LocationListener() {
@Override
public void onLocationChanged(Location arg0) {
map.setLocation(arg0);
}
public void onProviderDisabled(String arg0) {
}
public void onProviderEnabled(String arg0) {
}
public void onStatusChanged(String arg0, int arg1, Bundle arg2) { }
});
}
答案 0 :(得分:1)
onLocationChanged()在你真正开始接收GPS坐标之前不会开火。
我的意思是,在您开始接收数据之前,芯片必须根据我的经验预热约一分钟。
我通常会开始使用其他应用程序并等待它在我测试任何GPS应用程序之前证明GPS芯片已经预热。
我知道您提到它在Google地图中正常运行,但您是否尝试过清理内存并立即重新启动应用程序?
在开始接收coords之前,getLastKnownLocation()始终为null。
答案 1 :(得分:0)
位置框架在您的回调可用时将坐标推送到回调。根据天气等情况,您最初可能无法获得“修复”。当您的监听器成功注册时,您应该会在状态栏上看到“GPS”指示器。
getLastKnownPosition()
工作正常(可能会返回null
);谷歌地图使用它,而它正在等待位置提供商的初步修复。
您可能还想查看其他提供商可用的内容,例如单元塔数据,并尝试从那些(即LKP)获取数据,而不是或直到您的“首选”提供商开始推送数据。
此外,不要假设存在任何特定服务,例如LocationManager
(Context.getSystemService()
可以返回null
),或者存在任何合适的提供商,(getBestProvider()
可以返回null
)。您的代码将在正确的设备上以正确的设置失败。如果文档说null
,您必须检查它,否则用户将卸载它,因为FC到处都是。