@commonsware
让我首先感谢你对这个社区给予的所有帮助,我发誓我认为你接受的答案是大多数问题。
无论如何,在我开始使用locationpoller
之后有几个问题如another post所述,一旦我开始你的投票服务,我偶尔会得到这个:
03-07 15:42:03.260: W/MessageQueue(14699): Handler (android.location.LocationManager$ListenerTransport$1) {419425f8} sending message to a Handler on a dead thread
这仍然是一个问题吗?我无法分辨这是否只是位置管理员搞砸了它可能是超时处理程序
接下来是我创建这篇文章的主要关注点:
我需要在他们的屏幕关闭时跟踪用户,作为目标感知导航式应用程序的一部分,并且出于某种原因,它在进入地下一段时间后才会被唤醒。
我在没有网络的情况下玩的时候会得到一些奇怪的测试结果。现在我开始像你建议的服务
Intent i=new Intent(this, LocationPoller.class);
i.putExtra(LocationPoller.EXTRA_INTENT, new Intent(this, LocationReceiver.class));
i.putExtra(LocationPoller.EXTRA_PROVIDER, LocationManager.NETWORK_PROVIDER);
PollerThread#onPreExecute()
每次被调用,然后永远不会到达终点,2分钟后,我的接收器最终会在{ {1}} onTimeout
被触发。
然后当我再次关闭飞机模式时,一切似乎都恢复正常,我的接收器最终再次赶上。
我的问题是,当我在现实世界中进行测试,并将地铁带回家但让应用程序和服务保持运行时,一旦我重新连接到地面,我似乎无法在日志中找到服务继续进行的任何跟踪,和我的接收器,它使用另一个唤醒锁来重新打开屏幕/在靠近目的地时发送通知,在我重新打开我的应用程序之前永远不会被触发
长话短说 - 这是图书馆的一个问题吗?位置管理器如何工作的问题?你有没有想过更好的测试方法,而不仅仅是使用飞机模式?
地上,骑自行车,开车等等,一切似乎工作得很好,但是一旦我介绍地铁而我失去了所有的连接,狗屎停止工作,我只是不知道关于位置管理员的更精细点了解为什么服务似乎停止免责声明这个应用程序不适合地铁上的人,但我只是不确定(没有任何方法测试),如果用户在不知名的地方,并失去网络连接我希望他们也不会丢失跟踪(因为他们可以根据设置选择使用网络提供商或gps)
答案 0 :(得分:2)
这仍然是一个问题吗?
我不知道。如果您可以创建一个可重现的测试用例来证明这一点,请将问题发布到项目的问题跟踪器。
我的问题是,当我在现实世界中进行测试,并将地铁带回家但让应用程序和服务保持运行时,一旦我重新连接到地面,我似乎无法在日志中找到服务继续的任何痕迹< / p>
该服务不应该“继续”。该服务将尝试一段时间来获取位置修复,然后在发送超时消息后关闭。您可以通过AlarmManager
或类似方式进行实际的“轮询”。
引用文档:
您只需设置一个AlarmManager警报,以便按照您希望的频率联系LocationPoller,它将从那里处理所有位置工作,通过广播Intent向您发送结果...接下来,您需要创建一个警报通过AlarmManager,您可以控制检索位置的频率以及是否应该在设备处于睡眠状态时唤醒设备。请不要经常请求位置更新,因为这会耗尽用户的电量,尤其是在使用GPS时。
因此,您的第一步是确定您的警报是否正常工作。您可以使用adb shell dumpsys alarm
检查已注册的警报并查看正在进行的操作。