目前,我正在尝试使用目标NSUserNotification中的macOSX (而不是iOS)上的旧的iOS API来设置通知服务。问题是,我需要知道与用户设置的通知相关的系统首选项(最好是在运行时的其余时间),以确定是否实际看到了我的通知。该应用程序旨在以某种方式吸引用户的注意,以保证提醒不会被忽略,所以我想避免的是,在应用程序不知道的情况下,发出的通知不会在屏幕上产生任何声音或图像。如果不允许通知,应用程序应该以其他方式处理它。
我正在macOS 10.14 Mojave机器上工作。我用NSUserNotificationCenter编写的代码在实现shouldDeliver、didActivate等的自定义代理程序中运行得很好。只是目前我假设用户没有在通知中按下"frick“按钮。
不幸的是,NSUserNotificationCenter和相关类似乎没有像新API (UNUserNotificationCenter)那样具有决定权限的功能。我已经尝试了几个小时来解决这个问题,所以我想知道是否还有其他人找到了解决这个问题的办法。我不能真正使用新的API,因为这严格地是为了支持可能相当普遍的不使用mojave的人。
到目前为止,我一直在努力让它发挥作用:
我尝试过的一些代码包括以下内容:
CFPreferencesCopyKeyList((CFStringRef) @"com.apple.systemPreferences.plist", kCFPreferencesCurrentUser, kCFPreferencesCurrentHost);
CFPreferencesCopyKeyList((CFStringRef) @"com.apple.systemPreferences.plist", kCFPreferencesAnyUser, kCFPreferencesAnyHost);
//Unfortunately returns null with any combination of com.apple.notificationcenter.plist, kCFPreferencesCurrentUser, kCFPreferencesCurrentHost
CFPreferencesCopyKeyList((CFStringRef) @"com.apple.notificationcenter", kCFPreferencesAnyUser, kCFPreferencesAnyHost);发布于 2019-04-27 16:50:58
在我的系统中(只有macOS高中),您要查找的文件如下:
~/Library/Preferences/com.apple.ncprefs.plist
这将对应于kCFPreferencesCurrentUser和kCFPreferencesAnyHost的组合。(作为记录,kCFPreferencesCurrentUser + kCFPreferencesCurrentHost等同于~/Library/Preferences/ByHost/文件夹中的pref文件)。
我不认为任何设置都会存储在本地域中(我指的是根/Library/Preferences/文件夹)。
我能够使用以下代码获得应用程序和设置的列表:
[[NSUserDefaults standardUserDefaults] addSuiteNamed:@"com.apple.ncprefs"];
NSArray *apps = [[NSUserDefaults standardUserDefaults] objectForKey:@"apps"];
NSLog(@"[%@ %@] apps == %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), apps);注意到:如果你的应用程序被关闭,这是行不通的,因为其他pref文件的访问将被拒绝。
https://stackoverflow.com/questions/55851604
复制相似问题