概要
アイドルサービスは、ユーザがどのくらいの時間「アイドル状態」であるか、つまり、マウスやキーボードなどを使っていない時間を監視できるようにするサービスです。アイドル時間を直接取得することも可能ですが、所定の間隔でオブザーバを登録する使い方が一般的でしょう。
現在のところ、nsIIdleService
の実装は、Windows、Mac OS X、Linux (XScreenSaver を通じて) に対応しています。
実装は @mozilla.org/widget/idleservice;1
で行われています。インスタンスを作成するには、以下のように記述します。
var idleService = Components.classes["@mozilla.org/widget/idleservice;1"] .getService(Components.interfaces.nsIIdleService)
メソッドの概要
void addIdleObserver(in nsIObserver observer, in unsigned long time) |
void removeIdleObserver(in nsIObserver observer, in unsigned long time) |
属性
属性 | 型 | 説明 |
idleTime |
long |
ユーザが最後に操作を行ってから経過したミリ秒単位での時間。 読み取り専用 |
メソッド
addIdleObserver()
ユーザの操作が一定時間アイドル状態になった場合や、アイドル状態から復帰した際に通知を受けるオブザーバを追加します。
void addIdleObserver( in nsIObserver observer, in unsigned long time )
パラメータ
- <tt>observer</tt>
- 通知を受ける オブザーバ
- <tt>time</tt>
- オブザーバに通知が行われるまでのユーザのアイドル時間 (秒)
備考
- オブザーバが受け取る通知のサブジェクトは、常に
nsIIdleService
そのものです。ユーザがアイドル状態になった時、オブザーバのトピックは「idle」となり、復帰時には「back」となります。通知のデータパラメータには現在のユーザのアイドル時間が含まれます。
- 同じオブザーバを 2 回追加することができます。
- 大半の実装は、アイドル情報を取得するために OS に問い合わせを行う必要があります。これは、その実装の問い合わせ間隔によって、通知に遅延が生じる可能性があるということです。この間隔は、現在の実装では 5 秒となっています。
removeIdleObserver()
addIdleObserver で登録されたオブザーバを削除します。
void removeIdleObserver( in nsIObserver observer, in unsigned long time )
パラメータ
- <tt>observer</tt>
- 削除する オブザーバ
- <tt>time</tt>
- オブザーバに通知が行われるまでのユーザのアイドル時間 (秒)
備考
オブザーバの削除は、指定したアイドル時間のオブザーバについて 1 回だけ行われます。オブザーバを複数追加した場合は、個別に削除する必要があります。
サンプルコード
例 1:
var idleService = Components.classes["@mozilla.org/widget/idleservice;1"] .getService(Components.interfaces.nsIIdleService) setTimeout(function() { alert(idleService.idleTime) }, 1000) // このコードを追加した後、マウスやキーボードを操作しないと、 // 1000 前後の数字が警告ダイアログで表示されます。
例 2:
var idleService = Components.classes["@mozilla.org/widget/idleservice;1"] .getService(Components.interfaces.nsIIdleService) var idleObserver = { observe: function(subject, topic, data) { alert("topic: " + topic + "\ndata: " + data); } }; idleService.addIdleObserver(idleObserver, 60); // 1 分 // ... // removeIdleObserver を使ってオブザーバを削除するのを忘れずに! idleService.removeIdleObserver(idleObserver, 60);