Android的LocationManager忽略requestLocationUpdates调用中的更改,但仅限于Droid

问题描述:

在我开发的Android应用程序中,我需要LocationManager来给我定位修复。那一部分都很好,很好;它工作,已经有相当一段时间了,并且所有人都很高兴。Android的LocationManager忽略requestLocationUpdates调用中的更改,但仅限于Droid

但是,现在我最近还添加了一项功能,允许位置跟踪部分转到后台,我还希望允许它在这种情况下减慢更新以节省电池电量。实际上,我试图这样做的方式是通过使用新参数重新发出requestLocationUpdates调用,如果我的后台服务检测到没有任何已注册的监听器(它向通知栏提供了某些内容,所以我仍然希望它获得更新)。我们称之为“Servicemajig”服务。我这样做的方式,总之:

private void setMode(boolean foreground) { 
    // This sets whether we're in foreground or background mode. If we're 
    // not changing anything, though, don't do anything. 
    if(foreground == mForeground) return; 

    // Set the current mode... 
    mForeground = foreground; 

    // ...and switch! 
    if(mForeground) { 
     // Foreground mode means we go full tilt. 
     Log.i(DEBUG_TAG, "Switching to foregroud mode..."); 
     mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, Servicemajig.this); 
    } else { 
     // Background mode means we slow down. Like, say, 30 seconds. 
     Log.i(DEBUG_TAG, "Switching to background mode..."); 
     mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30000, 0, Servicemajig.this); 
    } 
} 

现在,这项工作,大部分。我没有得到双重更新(即我没有取消注册,但它仍然有效),在我的Nexus One和G1上,它可以根据需要正确切换背景和前景模式。也就是说,在尝试获得另一个定位点之前,它会正确等待约30秒(给予或带走),从而节省电池电量。

问题出现在我在摩托罗拉Droid上测试的时候。在Droid上,一旦我把它放在后台模式下,它将在修复之间等待30秒(再次给予或取出),但是如果它以这种方式获得至少一个修复,它将不会返回稍后再转到前台模式。也就是说,即使在我重新输入了前台模式所需和要求的实际应用程序之后,它仍然等待每次修复30秒,除了关闭Servicemajig并重新启动它之外,似乎无法解决此问题。日志显示它正在通过那部分代码,所以它至少得到了那么多。

所以我的问题是,这只是一个特定于Droid固件的错误?有什么方法可以解决这个问题吗?或者,这是否是正确的方式来做这样的事情?我会注意到,如果使用registerLocationUpdates调用在if块之前添加removeUpdates调用,则无关紧要。

+0

你有一个标准设置? – Skizit 2010-06-10 15:55:14

+0

我在这里没有任何情况下的Criteria集。我只是明确地使用可用的提供者。 我给出的代码是删节的;我还从NETWORK_PROVIDER请求位置更新,并根据每次更新来确定我接受的位置。然而,在Droid上,它甚至没有试图从任何提供商那里找到一个位置,直到30秒过去。 – CaptainSpam 2010-06-10 20:07:10

这可能听起来很愚蠢,但是每个设备和操作系统对的行为都不一样,我发现了。所以虽然我没有在Droid上看到过,但我在其他手机上看到过它。如果您可以跟踪您是否正在侦听更新,请删除更新,然后再次请求更新。无论哪种情况(多个请求与请求/删除)都没有很好地记录。

+0

我认为这可能是所有这一切的结果,奇怪的未定义行为在Droid上的实现方式与其他任何地方不同。无论如何,我最终采取了与此不同的方向,根本不需要这个。无论如何感谢您的帮助! – CaptainSpam 2011-04-18 04:06:42