我想实现一个方便易用的系统用于处理状态栏通知Android和我在想如下:钛(安卓)检查运行服务
- 创建一个数据库,我在哪里存储什么时间以及要显示什么
- 创建一个服务,使用'interval'服务在后台运行服务,API提供的服务
- 在该服务中,检查是否需要根据数据库显示任何通知,然后展示下。
唯一的问题是,我无法检测到,如果我需要启动服务或不。我想这些事情,但他们没有运作良好,到目前为止:
1)保存,如果该服务已经在本地存储启动:
// Do this on application startup
var isRunning = Ti.App.Properties.getBool("service_running", false);
if(!isRunning)
{
var service = Titanium.Android.createService(...);
service.addEventListener('start', function()
{
Ti.App.Properties.setBool("service_running", true);
});
service.addEventListener('stop', function()
{
Ti.App.Properties.setBool("service_running", false);
});
service.start();
}
这显然是行不通的,因为如果服务没有异常终止(如用户强制停止应用程序),则系统本机onStop
和onDestroy
事件将不会被分派,因此停止事件也不会被触发。
2)尝试通过Titanium.Android.getCurrentService()
访问任何现役,但我得到一个错误说Titanium.Android没有叫getCurrentService()方法。这很奇怪,因为IDE的代码完成为我提供了这种方法。
3)使用的意图,清除以前运行的服务
var intent = Titanium.Android.createServiceIntent
(
{
url : 'notification/NotificationService.js'
}
);
intent.putExtra('interval', 1000 * 60);
//Stop if needed
Titanium.Android.stopService(intent);
//Then start it
Titanium.Android.startService(intent);
但好像我需要有意向的同一个实例,启动该服务停止,因为这样做在应用程序启动时,然后退出并重新启动会导致运行多个服务。
在这一点上,我跑出了想法,关于如何检查正在运行的服务。请如果你知道任何方式做到这一点,让我知道!感谢任何提示!
编辑
以下是这给了我的想法,尝试上述方法(也许只有我错误地使用它们)源材料:
- 本地存储:Titanium.App.Properties
- 的访问正在运行的服务的方法:Titanium.Android.getCurrentService
- 使用意图停止服务的方法:Titanium.Android.stopService
以及NotificationHandler“class”和NotificationService的完整源代码。JS是我写的,和它们的用法:link
你能解决这个问题吗?我正在与一个非常相似的,即使不是一样的挣扎。 getCurrentService也不会对我做任何事情,我无法将意图/服务保存到应用程序属性等等。非常讨厌和混乱。更糟的是,我发现服务可能会被操作系统所杀,这是一个巨大的痛苦(并且它从不重新启动它)。 – Fygo 2013-08-15 15:28:38
我有关于这个问题的建议..我开始输入,但它太长,所以我张贴为答案..请检查 – Amith 2013-08-16 08:11:51