1

我在 MLocation 类中声明的 Android 小部件中有一个位置侦听器,

私有静态 MyLocationListener locationListener;

小部件启动一个服务,该服务又创建 MLocation 类。MLocation 类在创建时创建并注册位置侦听器。

一切正常,直到手机进入睡眠状态。当手机休眠时(休眠后的某个时间),Android 会终止该服务和它创建的所有类(MLocation 也是如此)。在手机解锁时,Android 会重新创建服务,然后创建 MLocation 类等。在手机睡眠期间,位置不再监听变化(因为它被杀死了)。有没有办法让位置监听器保持活跃,即使手机处于休眠状态?

4

3 回答 3

0

不会。当手机休眠时,不会基本上关闭 CPU,因此没有应用程序在运行。如果您需要在手机休眠时监听位置变化,您需要通过获取唤醒锁来防止手机休眠。请注意,如果您这样做,您将很快耗尽电池,并且您的用户将卸载您的应用程序。

于 2012-10-12T14:05:01.140 回答
0

如果您想在手机休眠时跟踪位置,则需要部分唤醒锁定。它会很快耗尽电池电量,因为您实际上是在阻止手机进入睡眠状态,即使用户按下电源按钮(但屏幕仍然可以关闭)。

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
wl.acquire();

您需要通过清单请求权限,并且它会在 Google Play 中可见(假设这是您放置应用程序的地方),因此高级用户应该知道其含义。

现在我会说你会在任何地方看到的内容:尽量避免使用部分唤醒锁定,因为它会耗尽电池并且人们会讨厌它。

OTOH,如果您的应用程序绝对需要它,这就是它必须的方式。

于 2012-10-12T14:09:05.377 回答
0

你应该只依赖你的LocationListener,你需要“重新思考”你的应用程序的所有结构。与实际位置的其他来源一起,注册 aLocationChangedReceiver可能是一个不错的选择。

有关更多详细信息,请查看@Reto Meier 撰写的这篇精彩文章:深入了解 Android 上的位置

于 2012-10-12T14:11:51.133 回答