android - Titanium (Android) 检查正在运行的服务

标签 android titanium titanium-mobile

我正在尝试实现一个易于使用的系统来处理 android 的状态栏通知,我正在考虑以下内容:

  • 创建一个数据库,存储显示时间和显示内容
  • 使用 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();
}

这显然是行不通的,因为如果服务没有异常终止(比如用户强制停止应用程序),因此也不会触发停止事件。

2.) 尝试通过 Titanium.Android.getCurrentService() 访问任何 Activity 服务,但我收到一条错误消息,提示 Titanium.Android 没有名为 getCurrentService( ).这很奇怪,因为 IDE 代码完成为我提供了这种方法。

3.)使用 Intent 清除之前运行的服务

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);

但似乎我需要具有相同的 Intent 实例,启动服务以停止它,因为在应用程序启动时执行此操作,然后退出并重新启动它会导致多个服务运行。

在这一点上,关于如何检查正在运行的服务,我没有任何想法。如果您知道任何方法,请告诉我!感谢您的任何提示!

编辑

以下是让我产生尝试上述方法的想法的源 Material (也许只是我使用不当):

  1. 本地存储:Titanium.App.Properties
  2. 获取正在运行的服务的方法:Titanium.Android.getCurrentService
  3. 停止带有 Intent 的服务的方法:Titanium.Android.stopService

以及我编写的 NotificationHandler“类”和 NotificationService.js 的完整源代码及其用法:link

最佳答案

使用Bencoding AlarmManager,它将提供安排警报通知所需的一切:https://github.com/benbahrenburg/benCoding.AlarmManager

这个模块提供了你所需要的。这真的很简单 - 只需在安排通知或服务时将重复设置为daily即可。

引用https://gist.github.com/itsamiths/6248106用于全功能代码

我正在检查服务是否启动然后显示每日通知或者启动服务然后显示每日通知

var isRunning = Ti.App.Properties.getBool("service_running", false);//get service running bool status
if (isRunning) {
    Ti.API.info('service is running');
} else {
    Ti.API.info('service is not running');
    alarmManager.addAlarmService({
        service : 'com.mkamithkumar.whatstoday.DailyEventNotificatoinService',
        hour : "08",
        repeat : 'daily'
    });
}

关于android - Titanium (Android) 检查正在运行的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15509883/

相关文章:

android - Facebook apprequests 对话框总是返回已取消的 Titanium Android?

安卓 : TextView horizontally scrolling

java - 操作栏上的 "Back"按钮 - Android。如何去 "back"?

titanium - Appcelerator钛金JS : Table Alphabetical Index not working

javascript - 如何隐藏/显示钛合金文本字段?

javascript - Titanium Appcelerator - 多屏应用

java - Singleton作为RecyclerView.Adapter的数据源

android - PubNub:无法解析方法订阅

ios - 在 Titanium 中更改 iOS 上选择器的字体颜色

ios - 在不使用 Appcelerator Cloudpush (ACS) 的情况下接收从 APNS 到 Titanium (iOS) App 的推送通知?