Visit Mozilla.org

nsIIdleService

出典: MDC

« XPCOM API Reference

この記事は Firefox 3 の新機能について述べています

目次

nsIIdleService widget/public/nsIIdleService.idl で定義されています。これは scriptable非凍結です。 (Mozilla 1.9aから更新されていません)

[編集] 概要

アイドルサービスは、ユーザがどのくらいの時間「アイドル状態」であるか、つまり、マウスやキーボードなどを使っていない時間を監視できるようにするサービスです。アイドル時間を直接取得することも可能ですが、所定の間隔でオブザーバを登録する使い方が一般的でしょう。

現在のところ、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
)
[編集] パラメータ
observer
通知を受ける オブザーバ
time
オブザーバに通知が行われるまでのユーザのアイドル時間 (秒)
[編集] 備考
  • オブザーバが受け取る通知のサブジェクトは、常に nsIIdleService そのものです。ユーザがアイドル状態になった時、オブザーバのトピックは「idle」となり、復帰時には「back」となります。通知のデータパラメータには現在のユーザのアイドル時間が含まれます。
  • 同じオブザーバを 2 回追加することができます。
  • 大半の実装は、アイドル情報を取得するために OS に問い合わせを行う必要があります。これは、その実装の問い合わせ間隔によって、通知に遅延が生じる可能性があるということです。この間隔は、現在の実装では 5 秒となっています。

[編集] removeIdleObserver()

addIdleObserver で登録されたオブザーバを削除します。

void removeIdleObserver(
  in nsIObserver observer,
  in unsigned long time
)
[編集] パラメータ
observer
削除する オブザーバ
time
オブザーバに通知が行われるまでのユーザのアイドル時間 (秒)
[編集] 備考

オブザーバの削除は、指定したアイドル時間のオブザーバについて 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);