【问题标题】:LocationListener works on emulator, not on phoneLocationListener 适用于模拟器,而不是手机
【发布时间】:2011-02-04 01:21:43
【问题描述】:

我无法让 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) {   }
    });
}

【问题讨论】:

  • 在 Eclipse 中使用 adb logcat、DDMS 或 DDMS 透视图检查 LogCat 并查看与您的崩溃相关的堆栈跟踪。

标签: android geolocation gps locationlistener


【解决方案1】:

在您真正开始接收 GPS 坐标之前,onLocationChanged() 不会触发。

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

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

我知道您提到它在 Google 地图中可以正常工作,但您是否尝试过清除内存并在之后立即重新启动应用程序?

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

【讨论】:

  • 您能澄清一下您所说的开始接收坐标是什么意思吗?您的意思是硬件必须触发它还是需要执行任何函数调用才能访问 GPS 信息?
【解决方案2】:

当坐标可用时,Location 框架会将坐标推送到您的回调中。根据天气等,您最初可能无法获得“修复”。成功注册监听器后,您应该会在状态栏上看到“GPS”指示器。 getLastKnownPosition() 工作得很好(它可能会返回null);谷歌地图在等待位置提供者的初始修复时使用它。 您可能还想查看其他可用的提供程序,例如cell-tower 数据,并尝试从那些(即 LKP)获取数据,而不是或直到您的“首选”提供商开始推送数据。 此外,不要假设存在任何特定服务,例如LocationManagerContext.getSystemService() 可以返回null),或者存在任何合适的提供者,(getBestProvider() 可以返回null)。您的代码将在具有正确设置的正确设备上按原样失败。如果文档上写着null,您必须检查它,否则用户将卸载它,因为它到处都是 FC。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多