Android LocationListener在模拟器上工作,而不是在手机上
我无法让LocationListener调用手机上的onLocationChanged()回调。当我在emulator中运行代码时,它工作正常,每次执行地理修复时都会调用回调 当我在手机上运行应用程序时,什么都没有发生。永远不会调用回调。在我的设置中,GPS和无线都启用了定位功能。应用程序具有位置权限的所有使用权限 另外,当我对LocationManager对象调用getLastKnownLocation()时,我的应用程序崩溃。(不过,只有在我愚蠢的手机上)。即使我试图捕获导致它崩溃的异常,它仍然只是崩溃,所以我甚至无法获得导致它崩溃的任何信息。这是非常令人沮丧的 LocationManager.getBestProvider()正在返回GPS,当我打开谷歌地图时,它会立即找到我的位置。这到底是怎么回事?有没有办法让我弄清楚为什么我的手机会崩溃Android LocationListener在模拟器上工作,而不是在手机上,android,geolocation,gps,locationlistener,Android,Geolocation,Gps,Locationlistener,我无法让LocationListener调用手机上的onLocationChanged()回调。当我在emulator中运行代码时,它工作正常,每次执行地理修复时都会调用回调 当我在手机上运行应用程序时,什么都没有发生。永远不会调用回调。在我的设置中,GPS和无线都启用了定位功能。应用程序具有位置权限的所有使用权限 另外,当我对LocationManager对象调用getLastKnownLocation()时,我的应用程序崩溃。(不过,只有在我愚蠢的手机上)。即使我试图捕获导致它崩溃的异常,它
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) { }
});
}
onLocationChanged()在您真正开始接收GPS坐标之前不会触发
我的意思是,根据我的经验,芯片必须预热一分钟左右,然后才能开始接收数据
我通常启动其他应用程序,等待它证明GPS芯片已经预热,然后再测试我的任何GPS应用程序
我知道你提到它在谷歌地图中正常工作,但你有没有尝试过清理内存,然后立即重新启动应用程序
此外,getLastKnownLocation()在您开始接收坐标之前始终为null。当坐标可用时,位置框架会将坐标推送到回调中。取决于天气等因素,最初可能无法得到“修复”。当您的侦听器成功注册时,您应该会在状态栏上看到“GPS”指示灯。
getLastKnownPosition()
工作正常(它可能返回null
);谷歌地图在等待位置提供商的初始修复时使用了这一功能。
您可能还希望查看其他可用的提供商,例如蜂窝塔数据,并尝试从这些提供商(即LKP)获取数据,而不是直到您的“首选”提供商开始推送数据。
另外,不要假设存在任何特定的服务,例如
LocationManager
(Context.getSystemService()
可以返回null
),或者存在任何合适的提供程序(getBestProvider()
可以返回null
)。您的代码将失败,因为它位于具有正确设置的正确设备上。如果文档中显示null
,您必须检查它,否则用户将卸载它,因为它到处都是。使用adb logcat
、DDMS或Eclipse中的DDMS透视图来检查logcat并查看与崩溃相关的堆栈跟踪。您能澄清一下开始接收坐标是什么意思吗?您的意思是硬件必须触发它,还是需要进行任何功能调用才能访问GPS信息?