在NativeScript应用程序中获取Android WakeLock

在NativeScript应用程序中获取Android WakeLock,android,nativescript,nativescript-angular,Android,Nativescript,Nativescript Angular,我几乎完成了一个NativeScript应用程序,它将计时器集成为UI的一部分。(我重复一遍,NativeScript应用程序。NativeScript有点像React Native。它是用JavaScript编写的,而不是Java。)用户将创建一个计时器,该计时器最多运行100分钟,但可以运行1秒,期望在该过程结束时一定会发出警报,不管他们是否使用过手机。当我在手机上运行此应用程序时,手机屏幕被锁定一段时间后(我不确定具体需要多长时间,但可能需要10-30分钟),闹钟不会响,应用程序会重新启动

我几乎完成了一个NativeScript应用程序,它将计时器集成为UI的一部分。(我重复一遍,NativeScript应用程序。NativeScript有点像React Native。它是用JavaScript编写的,而不是Java。)用户将创建一个计时器,该计时器最多运行100分钟,但可以运行1秒,期望在该过程结束时一定会发出警报,不管他们是否使用过手机。当我在手机上运行此应用程序时,手机屏幕被锁定一段时间后(我不确定具体需要多长时间,但可能需要10-30分钟),闹钟不会响,应用程序会重新启动到主页。理想情况下,我希望应用程序的状态能够完全保留,并且在屏幕关闭时,角度组件中继续进行处理。是的,我知道这会消耗电池寿命

现在,我用来在Android中强制执行部分唤醒锁的代码如下所示:

acquireWakeLock() {
    //enforce a new partial wake lock
    const PowerManager = android.os.PowerManager;
    let powerManager = <PowerManager>application.android.context.getSystemService(android.content.Context.POWER_SERVICE);
    this.wakelock = <PowerManager.WakeLock>powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "RoutineTimer");
    this.wakelock.acquire();
    console.log("Acquired new wake lock");
}
acquireWakeLock(){
//强制执行新的部分唤醒锁
const PowerManager=android.os.PowerManager;
让powerManager=application.android.context.getSystemService(android.content.context.POWER\u服务);
this.wakelock=powerManager.newWakeLock(powerManager.PARTIAL_WAKE_LOCK,“RoutineTimer”);
this.wakelock.acquire();
console.log(“获取的新唤醒锁”);
}
(请原谅这些冗长的引用,但我把它们放在这里是为了区分“android”和“application.android”。)

这根本没有预期的效果。它是从一个角度组件调用的,但它包含在一个角度服务中


有谁知道这是怎么回事,或者有其他建议吗?我不喜欢使用全屏唤醒锁,尽管我知道有一个插件可以实现这一点。出于财务原因,我也不希望从服务器发送任何类型的广播。

好吧,我找到了如何启动唤醒锁的方法,但需要注意的是,它现在没有太大的用处(而且会很浪费,所以我不再使用这种方法)

如果你想使用Android唤醒锁,你必须把这段代码放在一个Android服务中,而我的代码只是放在一个Angular服务中(似乎没有问题,有一个类同时充当这两个功能)。我认为它可以在代码库中的任何地方完成,因此出现了问题

最后一个答案给出了如何使用TypeScript启动Android服务的详细描述(我在实际文档中找不到)。上面的代码可以直接放在那里

我认为更好的方法可能是使用AlarmManager,但我仍然不知道如何保持某种跨平台的方法,并从Java代码中执行我的NativeScript JS代码。理想情况下,应该有一个NativeScript插件,可以在任意时间处理调度任务


无论如何,我现在的解决方案是使用nativescript本地通知插件,并在特定时间安排通知。不幸的是,在收到通知时执行代码还不受支持(但这是一个功能请求)。

这方面有进展吗?我想每10分钟从一个IP进行一次投票,FCM似乎有点太多的要求(域名,SSL)。@inf3rno不是真的。不过,我已经很长时间没有研究它了,所以现在可能有更好的解决方案。nativescript任务调度器插件看起来可能对计划任务有用