私のcocoaアプリケーションはバックグラウンドタスクを実行します。ユーザーはアイドル状態(キーボード入力/マウス入力なし)で停止し、ユーザーが再度アクティブになったときに再開します。アイドル状態通知に登録する方法はありますか?目的C:ユーザーのアイドル状態に関する通知を取得する
答えて
(つまり、あなたはx86_64のビットのバイナリコンパイルしたい。)あなたは(doubleとして秒の分解能で、現在のアイドル時間を返します - CFTimeInterval)この機能をラップすることができ、タイマーで:
#include <IOKit/IOKitLib.h>
CFTimeInterval CFDateGetIdleTimeInterval() {
mach_port_t port;
io_iterator_t iter;
CFTypeRef value = kCFNull;
uint64_t idle = 0;
CFMutableDictionaryRef properties = NULL;
io_registry_entry_t entry;
IOMasterPort(MACH_PORT_NULL, &port);
IOServiceGetMatchingServices(port, IOServiceMatching("IOHIDSystem"), &iter);
if (iter) {
if ((entry = IOIteratorNext(iter))) {
if (IORegistryEntryCreateCFProperties(entry, &properties, kCFAllocatorDefault, 0) == KERN_SUCCESS && properties) {
if (CFDictionaryGetValueIfPresent(properties, CFSTR("HIDIdleTime"), &value)) {
if (CFGetTypeID(value) == CFDataGetTypeID()) {
CFDataGetBytes(value, CFRangeMake(0, sizeof(idle)), (UInt8 *) &idle);
} else if (CFGetTypeID(value) == CFNumberGetTypeID()) {
CFNumberGetValue(value, kCFNumberSInt64Type, &idle);
}
}
CFRelease(properties);
}
IOObjectRelease(entry);
}
IOObjectRelease(iter);
}
return idle/1000000000.0;
}
あなたは、私は別のアプローチを使用IOKit.framework
アップルのTechnical Q&A QA1340 Registering and unregistering for sleep and wake notificationsがあなたが探しているものかもしれません。
NSWorkspaceWillSleepNotification(リスト1)より多くの制御が必要な場合は、I/O Kitを使用して登録して電力通知を受信します(リスト3)。
スリープ/スリープ解除通知に依存する問題は、スリープ設定を「決して」設定しないと、決して送信されないということです。私はキーボード/マウスの活動がない時としてアイドル時間をカウントしたいと思います。 – David
申し訳ありませんが、アプリが理想的な睡眠に入ったときを意味しました。 kperryuaのCGEventSourceSecondsSinceLastEventTypeのソリューションは、最後のユーザー入力以降の監視時間に適しています。 –
EventLoopIdleTimer
という一定の期間が経過してもユーザーイベントが発生していない場合に通知を送信するCarbon APIがあります。 Uli Kustererはhere (look for UKIdleTimer)のためのCocoaラッパーを書いています。
低レベルが必要な場合は、タイマーとCoreGraphics関数の組み合わせを使用して、動作を実装することができます(<CoreGraphics/CGEventSource.h>
で利用可能)。あなたはカーボンにリンクすることができない場合には
にあなたのコードをリンクする必要があります。 UIApplicationのサブクラス化sendEventメソッドのフィルタリングをオーバーライドします(実際には、あらゆる種類のイベント、アクセラレーション、タッチなどをフィルタリングできます)。 共有変数とバックグラウンドタイマーを使用して、私は "アイドル"を管理しました。 ユーザーが画面に触れるたびに、変数は現在のtimeInterval(現在の時間)で設定されます。 タイマーの起動メソッドは、最後の接触からの経過時間をチェックします。しきい値(私の場合は約90秒です)より大きい場合、あなた自身の通知をPOSTできます。
この単純なアプローチを使用して、ある種のアイドルタイムの後に自動的に「スクリーンセーバー」アプリを呼び出すカスタムアプリを作成しました。
何も巧妙ではなく、ただ仕事をします。
希望に役立ちます。
- 1. アイドル状態のアイドル状態のユーザーに通知する
- 2. デバイスがアイドル状態のときのプッシュ通知の処理
- 3. Windowsのアイドル状態のバックグラウンドアプリケーションからstdoutを取得する
- 4. 通話状態の通知
- 5. iOS:ユーザーがアイドル状態のときのみ、NSLocalNotificationまたはプッシュ通知を配信します。
- 6. Androidスタジオ(IntelliJ)がアイドル状態のときに自動gitを取得する
- 7. アンドロイド通話の通話状態を取得する方法
- 8. 休止状態から復帰する際の通知C#
- 9. Seamを開始するContext数秒間アイドル状態にしても何度もアイドル状態になる
- 10. Windowsサービスがアイドル状態でシャットダウンする
- 11. Unity3dアニメーションをアイドル状態に戻す
- 12. UISwitchの状態を保存する - 目的C
- 13. 目的C + RESTKit:オブジェクトの取得に関する問題
- 14. ユーザーがアイドル状態になった後のポップアップ
- 15. iOSサイレントローカルプッシュ通知の目的c?
- 16. C#でページの現在の状態を取得するには?
- 17. Linux for armv8 - すべてのアイドル状態のプロセッサ状態を避ける
- 18. iOS 10のプッシュ通知を実装する方法[目的C]?
- 19. 目的地のローカル通知をカスタマイズする-c
- 20. ユーザーの状態を取得する方法
- 21. HealthKit:身体活動、バックグラウンド、終了状態(Obj-C、iOS 10.3)でトリガーされた通知を取得する
- 22. テンソルフローC/C++でLSTMの状態を取得して取得する方法
- 23. 子供の接続状態の親コンポーネントに通知する
- 24. アイドル状態のワーカープロセスのIISシャットダウンを無効にする問題?
- 25. Cでスレッドの状態を取得++ /窓
- 26. Opendaylight:フローミスイベントに関する通知を取得する
- 27. プッシュ通知中にスタンバイ状態でアプリを起動する
- 28. XCTestCase:アプリケーションがアイドル状態になるのを待ちます。
- 29. SharePoint Workflowでユーザー不在状態を取得する方法
- 30. vpython 7 with jupyterノートブックカーネルがビジー状態とアイドル状態の間でジャンプする
小さな編集、エントリ= IOIteratorNext(層)はエントリ= IOIteratorNext(iter)でなければなりません。 – Shaun
HIDIdleTimeは信頼性が高くなく、理由がわからないため、一部のMacでは常にゼロを返します(おそらく、接続されているデバイスによってはアイドル時間がリセットされる)ことがあります。 –