Phonegap Android:通过程序化用户活动防止睡眠

时间:2012-12-20 22:07:28

标签: android cordova sleep

我有一个可以扫描RFID芯片的Phonegap Android应用程序。显然扫描RFID不算作用户操作,因为设备将在Android设置中设置的间隔后进入休眠状态(最多10分钟)。

因此,尽管不断扫描,我的设备仍会进入睡眠状态。因此,我需要一种方法来告诉操作系统我在每次RFID扫描后以编程方式处于活动状态。

目前,我正在做一些我不想要的事情,即使用

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

在应用程序运行时防止睡眠,但如果设备实际处于非活动状态,我仍希望能够使用睡眠间隔。

我对使用powerManager.userActivity(l, false)寄予厚望,但显然这只适用于系统应用,因此无法为其设置权限。

如何在不进行任何触摸屏交互的情况下保持设备处于活动状态的任何想法?

3 个答案:

答案 0 :(得分:3)

您可以使用此cordova插件

  

https://github.com/EddyVerbruggen/Insomnia-PhoneGap-Plugin

为了防止睡觉,请致电:

window.plugins.insomnia.keepAwake();

并允许再次入睡:

window.plugins.insomnia.allowSleepAgain();

答案 1 :(得分:0)

您需要稍微使用JAVA。

将此代码添加到您的活动类:

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

Here您会找到更多信息。

也不要忘记在最后释放WakeLock:

 wl.release();

您还需要确保在Manifest中设置了WAKE_LOCK权限。

答案 2 :(得分:0)

WakeLock就是答案,但关键是使用ON_AFTER_RELEASE。使用此标志,释放WakeLock时将重置用户活动计时器。

对于NFC插件,在onPause方法下我添加了:

MyMainActivity ma = (MyMainActivity) cordova.getActivity();
wl = ((PowerManager) ma.getSystemService(Context.POWER_SERVICE))
    .newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, "wakeywakey");
wl.acquire();

在onResume方法下我添加了:

wl.release();

通过这种安排,当扫描RFID芯片时,NFC插件将创建WakeLock然后释放它,这将重置活动计时器。此外,我使用SCREEN_BRIGHT_WAKE_LOCK即使它已被弃用,因为如果屏幕变暗,这将使屏幕更亮。