2010-08-27 174 views
0

我正在开发一个需要了解用户位置的位置感知应用程序。 问题是应用程序似乎不能正常工作。Android GPS位置监听器

正确地说,我的意思是说,每次我必须首先打开一个应用程序(例如有氧运动训练器)才能获得GPS信号,然后运行我的程序,否则通知栏上的GPS图标会闪烁,如闪烁该设备尝试获取GPS信号,过了一段时间后,它停止并且没有位置返回!

这真的很奇怪,因为它不应该停止,是否有一个区间,android提供GPS获取信号?

关于文档,我还没有找到任何有关的。

我的代码如下:

lm.isProviderEnabled(LocationManager.GPS_PROVIDER); 
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 10, locationListenerGps); 
LocationListener locationListenerGps = new LocationListener() { 
    public void onLocationChanged(Location location) { 
     locationResult.gotLocation(location); 
     Log.e("##################","MyLocation got GPS location accuracy: 
     "+location.getAccuracy()+" Altitute: "+location.getAltitude()+" log: 
     "+location.getLongitude()+" lat: "+location.getLatitude()); 
    } 
    public void onProviderDisabled(String provider) {} 
    public void onProviderEnabled(String provider) {} 
    public void onStatusChanged(String provider, int status, Bundle extras) {} 
    }; 

这应该打开GPS提供商和注册监听器名为locationListenerGps将由外景经理被称为每隔1分钟或右10米?

为什么我必须首先打开cardioTrainer以获取GPS信号?

+0

您是否拥有ACCESS_FINE_LOCATION权限? – EboMike 2010-08-27 17:35:19

+0

是的,如果我没有抛出异常,我拥有所有需要的权限。这是否可能是由于唤醒锁定问题或与位置管理器无关的其他内容引起的? – maxsap 2010-08-27 19:45:28

+0

你是如何初始化你的lm变量的? – 2010-08-27 23:05:13

回答

0

尝试在侦听器中放置以下调试代码,以查看您的位置提供程序何时启用或禁用。这会告诉你什么时候你的提供者改变了状态,并且可能会告诉你当你的应用运行时发生了什么。

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 
    switch (status) { 
    case LocationProvider.TEMPORARILY_UNAVAILABLE: 
     Toast.makeText(mCtx, "Your location is temporarily unavailable", 
       Toast.LENGTH_SHORT).show(); 
     break; 
    case LocationProvider.OUT_OF_SERVICE: 
     Toast.makeText(mCtx, "Your location is now unavailable", Toast.LENGTH_SHORT) 
       .show(); 
     break; 
    case LocationProvider.AVAILABLE: 
     Toast.makeText(mCtx, "Your location is now available", Toast.LENGTH_SHORT) 
       .show(); 
    } 
} 
+0

谢谢我会尝试并发布结果。 – maxsap 2010-08-28 07:23:07