2011-12-30 45 views
2

我目前正在开发一个基于位置的解决方案,我需要处理定期位置更新。它可以在Torch 9800,Bold 9780上正常工作,但是,不会定期在Curve 8900上使用OS 5.0.0.535进行位置更新。BlackberryLocationProvider setLocationListener不给8900定期位置更新,其余设备工作正常

我定义我的标准为:

bbCriteria = new BlackBerryCriteria(); 
bbCriteria.setSpeedAndCourseRequired(false); 
bbCriteria.setCostAllowed(true); 
if(bbCriteria.getMode() == GPSInfo.GPS_MODE_ASSIST) { 
    bbCriteria.setHorizontalAccuracy(20); 
    bbCriteria.setVerticalAccuracy(20); 
} 

,我通过注册定期更新:

locationProvider = (BlackBerryLocationProvider)LocationProvider.getInstance(bbCriteria); 
locationProvider.setLocationListener(new MyLocationListener(), getUpdateInterval(), -1, -1); 

在那里我计算我的业务逻辑的基础上的时间间隔。一般来说它是60秒。

我确实在我的听众中收到了许多设备的定期位置更新,例如Torch 9800,Bold 9780,但是在第一次更新之后没有任何反应。

此外,在其他设备默认的GPS模式是ASSISTED,但是,在曲线8900它是自主的。

请让我知道问题是什么?

回答

2

嗯......我从我的测试中发现,LocationListener似乎只有的位置,但实际上并没有要求它。因此,如果其他应用请求定位,您的应用会定期收到该定位,但如果没有任何活动要求定位,则不会提供。我已经实现的解决方案是完全放弃LocationListener,并简单地设置一个定期调用getLocation来定期获取新位置。这一切都很好。这种方法也给了你更多的控制权,因为如果设备未能获得你将要知道的位置并得到原因(超时等)。

至于你的问题关于默认,不同的设备可能有不同的默认也基于载体。举例来说,Verizon确实限制了对Assisted和Cellsite的支持。