Codenameone 当应用程序处于后台或智能手机处于空闲状态时,使用Codename One-UITimer

Codenameone 当应用程序处于后台或智能手机处于空闲状态时,使用Codename One-UITimer,codenameone,Codenameone,这个问题与前一个问题有关: 我发现当应用程序在后台或智能手机空闲时,UITimer不起作用 考虑以下代码(在Android上测试): 问题在于,当应用程序打开时,会播放bell.mp3,然后应用程序自动进入后台,智能手机在几秒钟后(根据Android设置)变为空闲(即黑屏),五分钟后不会调用sound()方法。当我唤醒智能手机(按下电源按钮并在屏幕上移动一个手指)时,只有在按下“主页”按钮并将应用程序置于前台后,才会调用它。如果应用程序已经在前台,但智能手机处于空闲状态(这是用户不使用它时的正常

这个问题与前一个问题有关:

我发现当应用程序在后台或智能手机空闲时,
UITimer
不起作用

考虑以下代码(在Android上测试):

问题在于,当应用程序打开时,会播放
bell.mp3
,然后应用程序自动进入后台,智能手机在几秒钟后(根据Android设置)变为空闲(即黑屏),五分钟后不会调用
sound()
方法。当我唤醒智能手机(按下电源按钮并在屏幕上移动一个手指)时,只有在按下“主页”按钮并将应用程序置于前台后,才会调用它。如果应用程序已经在前台,但智能手机处于空闲状态(这是用户不使用它时的正常状态),那么问题也是一样的


所以,这就是我的问题:我需要执行
sound()
以每五分钟自动播放一次声音(或者执行其他操作)。正确的方法是什么

EDT不在后台运行,因此没有
UITimer
no
callSerially
等。如果我们运行EDT,我们将消耗电池资源,操作系统将关闭应用程序,因此这不是您想要的


您可能正在寻找的是。

中讨论的背景音乐。好的,但是如果我不能使用UITimer每五分钟安排一次,我可以使用什么来实现这一目的?另一根线?我怎样才能每五分钟引起用户的注意?我的mp3只是一个很短的声音,以引起用户的注意(它是一个通知声音)。我必须使用来自服务器的推送通知吗?在不涉及外部服务器的情况下,有没有更好的方法?有本地通知,这样您的设备就会被唤醒。您可以安排一个带有声音的新本地通知并执行此操作。请注意,移动设备并不“真正”支持多任务。他们会杀死一个试图在后台做事情的应用程序,这是一件好事。。。想象一下,一个应用程序每5分钟持续播放一次ping声音,但没有显示您的100个应用程序中的哪一个正在这样做。本地通知还包括视觉指示和防止这种情况的通知来源。
public void start() {
        if (current != null) {
            current.show();
            return;
        }
        Form hi = new Form("Five minutes alert", BoxLayout.y());
        hi.add(new Label("Alert every five minutes..."));
        Button button = new Button("Go to background");
        button.addActionListener(l -> {Display.getInstance().minimizeApplication();});
        hi.add(button);
        hi.show();
        sound();
        UITimer.timer(1000 * 60 * 5, true, () -> {
            sound();
        });
        Display.getInstance().minimizeApplication();
    }

    private void sound() {
        try {
            Media m = MediaManager.createMedia((Display.getInstance().getResourceAsStream(getClass(), "/bell.mp3")), "audio/mpeg");
            m.play();
        } catch (IOException err) {
            Log.e(err);
        }
    }