这个问题与前一个问题有关:代号一-每五分钟通知用户一些事情
我发现当应用程序处于后台或智能手机空闲时,UITimer
无法正常工作。
考虑以下代码(在Android上测试):
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);
}
}
问题是,当应用程序打开铃铛时.mp3
播放,之后应用程序自动进入后台,智能手机在几秒钟后(根据Android设置)变得空闲(这意味着黑屏),并且五分钟后不调用sound()
方法。当我唤醒智能手机(按下电源按钮并在屏幕上移动一根手指)时,只有在按下“主页”按钮并将应用程序放在前台之后,才会调用它。如果应用程序已经在前台,但智能手机处于空闲状态(这是用户不使用时的正常状态),则问题相同。
所以,这是我的问题:我需要执行声音()
来每五分钟自动播放一个声音(或者做其他事情)。正确的方法是什么?
EDT不在后台运行,因此没有UITimer
nocallSerially
等。如果我们运行EDT,我们会消耗电池资源,操作系统会杀死应用程序,因此这不是您想要的。
您可能正在寻找的是背景音乐,这在这里的背景音乐部分中进行了讨论。
我创建了一个自定义后台服务,它正在扩展IntentService。当我的应用程序进入后台时,我会调用这个类。startService()。Firsly onStartCommand在我返回START_STICKY的地方被调用(就像我读过一些其他帖子,以保持我的服务处于活动状态,并在由于内存不足而被终止时根据需要重新创建)。在那之后,我将实现onHandleIntent(intent)方法,从调用者
谁能给我建议哪种最好的方法来不中断地运行应用程序?
onMessageReceived(RemoteMessage RemoteMessage)在应用程序处于后台时未调用或仅显示{“body”:“test”,“title”:“test notification}之类的json字符串
我正在开发一个将在Kiosk模式下运行的应用程序。在这个应用程序中,如果用户在5分钟内没有在应用程序中做任何事情,应用程序将显示一个屏幕保护程序,这是应用程序的徽标。 我的问题是,如何在5分钟内检测到空闲代码?