使用send notifications和NSUserNotification API类,可以NSUserNotificationCenter到Mac上的通知中心。
但是否有任何方式从通知中心阅读通知?
答案 0 :(得分:6)
没有公共API。所以没有任何App Store符合。
BUT
作为我的小技术 - 演示应用程序DiscoNotifier的一部分(我通过闪烁键盘LED响应通知)我写了一个DDUserNotificationCenterMonitor类
请参阅:https://github.com/Daij-Djan/DiscoNotifier/tree/master/DiscoNotifier
它使用FileSystemEvents和SQLite工作并检查通知中心的数据库
它有效且数据库包含所有信息(table:presents_notifications)但是......这是脆弱的私有
答案 1 :(得分:1)
感谢Daij-Djan的回答,我可以发现通知中心的偏好位于~/Library/Application Support/NotificationCenter/
的SQLite数据库中。
#import "FMDatabase.h"
#import "FMDatabaseAdditions.h"
获取数据库文件并将其打开。
NSString *pathToNCSupport = [@"~/Library/Application Support/NotificationCenter/" stringByExpandingTildeInPath];
NSError *error = nil;
NSArray *contents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:pathToNCSupport error:&error]; //find the db
FMDatabase *database = nil;
for (NSString *child in contents) {
if([child.pathExtension isEqualToString:@"db"]) {
database = [FMDatabase databaseWithPath:[pathToNCSupport stringByAppendingPathComponent:child]];
if([database open]) {
printf("Opening Notification Center");
[database close];
break;
}
}
}
启动任何SQL查询:
if([database open]) {
FMResultSet *rs = [database executeQuery:@"select count(*) as cnt from presented_notifications"];
while ([rs next]) {
int cnt = [rs intForColumn:@"cnt"];
NSLog(@"Total Records :%d", cnt);
}
[database close];
}
在Github完成项目。