1

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

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

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

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

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

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

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

4

3 回答 3

3

你可以使用这个科尔多瓦插件

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

为了防止睡觉,你打电话:

window.plugins.insomnia.keepAwake();

并允许再次睡觉:

window.plugins.insomnia.allowSleepAgain();
于 2014-11-26T11:28:55.780 回答
0

您将需要稍微玩一下 JAVA。

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

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

在这里您会找到更多信息。

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

 wl.release();

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

于 2012-12-20T22:49:28.520 回答
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即使它已被弃用,我也使用它,因为如果屏幕变暗,它会使屏幕变亮。

于 2013-01-02T20:07:48.437 回答