Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android LocationListener在模拟器上工作,而不是在手机上_Android_Geolocation_Gps_Locationlistener - Fatal编程技术网

Android LocationListener在模拟器上工作,而不是在手机上

Android LocationListener在模拟器上工作,而不是在手机上,android,geolocation,gps,locationlistener,Android,Geolocation,Gps,Locationlistener,我无法让LocationListener调用手机上的onLocationChanged()回调。当我在emulator中运行代码时,它工作正常,每次执行地理修复时都会调用回调 当我在手机上运行应用程序时,什么都没有发生。永远不会调用回调。在我的设置中,GPS和无线都启用了定位功能。应用程序具有位置权限的所有使用权限 另外,当我对LocationManager对象调用getLastKnownLocation()时,我的应用程序崩溃。(不过,只有在我愚蠢的手机上)。即使我试图捕获导致它崩溃的异常,它

我无法让LocationListener调用手机上的onLocationChanged()回调。当我在emulator中运行代码时,它工作正常,每次执行地理修复时都会调用回调

当我在手机上运行应用程序时,什么都没有发生。永远不会调用回调。在我的设置中,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) {   }
    });
}
onLocationChanged()在您真正开始接收GPS坐标之前不会触发

我的意思是,根据我的经验,芯片必须预热一分钟左右,然后才能开始接收数据

我通常启动其他应用程序,等待它证明GPS芯片已经预热,然后再测试我的任何GPS应用程序

我知道你提到它在谷歌地图中正常工作,但你有没有尝试过清理内存,然后立即重新启动应用程序


此外,getLastKnownLocation()在您开始接收坐标之前始终为null。

当坐标可用时,位置框架会将坐标推送到回调中。取决于天气等因素,最初可能无法得到“修复”。当您的侦听器成功注册时,您应该会在状态栏上看到“GPS”指示灯。
getLastKnownPosition()
工作正常(它可能返回
null
);谷歌地图在等待位置提供商的初始修复时使用了这一功能。 您可能还希望查看其他可用的提供商,例如蜂窝塔数据,并尝试从这些提供商(即LKP)获取数据,而不是直到您的“首选”提供商开始推送数据。
另外,不要假设存在任何特定的服务,例如
LocationManager
Context.getSystemService()
可以返回
null
),或者存在任何合适的提供程序(
getBestProvider()
可以返回
null
)。您的代码将失败,因为它位于具有正确设置的正确设备上。如果文档中显示
null
,您必须检查它,否则用户将卸载它,因为它到处都是。

使用
adb logcat
、DDMS或Eclipse中的DDMS透视图来检查logcat并查看与崩溃相关的堆栈跟踪。您能澄清一下开始接收坐标是什么意思吗?您的意思是硬件必须触发它,还是需要进行任何功能调用才能访问GPS信息?