[Titanium][Android] 定期実行するServiceを起動してNotificationに表示

titanium_android_serviceバックグラウンドで定期的に動作するServiceを実装したときの覚書。

環境: Titanium SDK 3.2.3.GA, Android

参考サイト

サンプルコードは上記サイトを参考に。

サービスが起動しているかどうかのチェックは次のようにする。

if (Ti.Android.isServiceRunning(Ti.Android.createServiceIntent({url: 'testservice.js'}))) {
    console.log('Service IS running');
}

この辺はKitchenSinkのコードを見るとわかりやすい。

 

サービス起動中はNotificationの「進行中」に出しておきたい。

上記を参考に下記関数をserviceのstart, stopイベントにバインドする。

_service.addEventListener('start', handleStartService);
_service.addEventListener('stop', handleStopService);

function handleStartService(){
    var pending, notification;

    // Intent for Click Notification
    pending = Ti.Android.createPendingIntent({
        intent: Ti.Android.createIntent({
            flags: Ti.Android.FLAG_ACTIVITY_BROUGHT_TO_FRONT,
            className: 'com.hoge.gps.HogeGpsActivity'
        }),
        flags: Ti.Android.FLAG_UPDATE_CURRENT
    });

    // Create Notification
    notification = Ti.Android.createNotification({
        contentIntent: pending,
        icon: '/images/notification.png',
        contentTitle: L('service_notice_title'),
        contentText: L('service_notice_text'),
        flags: Titanium.Android.FLAG_ONGOING_EVENT | Titanium.Android.FLAG_NO_CLEAR
    });

    // Show
    Ti.Android.NotificationManager.notify(1, notification);
}

function handleStopService(){
    Ti.Android.NotificationManager.cancel(1);
}

classNameに指定するActivityの名前はbuild/android/AndroidManifest.xmlを見て確認する。

Notificationのアイコンサイズは24x24dp。詳しくは公式サイトで。

 

< Related Posts >