我对Android很新鲜。我面对一些雄心勃勃的大学项目,所以我希望你能告诉我,我对跟进应用程序实施的想法是否正确和有效:
业务场景:
我的实施理念......
我将使用AlarmManager准备Intent匹配BroadcastReceiver(并以1分钟的间隔安排它)。然后我将在onReceive()方法中启动WakefullIntentService。这将在后台提供我的WebService。这适用于在后台通过HTTP发送数据。
......和疑惑:
如何在后台更新GPS /“网络提供的”位置数据?我应该开始一些额外的服务并在其中使用LocationListener吗?那么使用AlarmManager是没有意义的 - 我可以从这个位置监控服务提供我的WebService。
但正如我在此读到的那样:Diamonds Are Forever. Services Are Not.玩永无止境的服务并不是一个好习惯。据我所知,当我的手机正在睡觉时它无法正常工作。
答案 0 :(得分:0)
首先,每分钟轮询GPS将会杀死用户电池。所以我会重新考虑你申请的这一部分。
除了使用Wakeful IntentService之外,您的警报管理器理论在理论上很好。如果你每分钟(或更频繁地)唤醒手机,你就会再次杀死电池。你应该做的是当你获得广播时,将数据包含的内容保存到磁盘(可能在sqlite数据库中)。当设备完全唤醒时(这是您可以收到的广播),然后将内容刷新到您的网络服务。
答案 1 :(得分:0)
请勿使用闹钟管理器。你不想做什么。
使用实现LocationListener的后台服务。您可以指定检查位置更新的频率,甚至可以指定必须更改多少距离才能将其视为新位置。这是在requestLocationUpdates方法中完成的。
以下是一些可以帮助您入门的代码:
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 1, this);
这将尝试每60秒获取一个新位置,并且只有当距离改变了1米时才会这样。这就是位置监听器只有在满足上述条件时才会触发。
希望这有帮助。