繁体   English   中英

通过帮助程序发布的NSUserNotification打开主应用程序

[英]Have main app open with NSUserNotification posted from helper

我有一个辅助应用程序,该应用程序在GUI应用程序未激活时处于活动状态。 助手应用程序正在向[NSUserNotificationCenter defaultNotificationCenter]发布通知。 当用户激活来自助手的通知时,我想打开GUI应用程序。 有没有办法做到这一点?

我还希望助手应用程序发布通知的名称与主应用程序名称相同,但是与将didActivateNotification:发送到正确的可执行文件相比,这没有什么问题。

您可以简单地通过NSWorkspacedidActivateNotification:委托方法中打开您的主应用程序:

- (void)userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification
{
    [[NSWorkspace sharedWorkspace] launchApplicationAtURL:[NSURL fileURLWithPath:@"/Applications/TextEdit.app"] options:0 configuration:nil error:nil];
}

如果该应用未运行,它将在指定的URL上打开该应用,如果已打开,则将其置于前台。

一种替代方法是在主应用程序中注册自定义URL方案 ,然后使用NSWorkspace的openURL。 这样,您可以定义一个简单的操作/参数语法,从而触发主应用程序中的不同行为。

发布通知仅适用于已注册接收这些通知的正在运行的应用程序。

如果要启动GUI应用程序,则可以使用[[NSWorkspace sharedWorkSpace] launchApplication:pathToApplication]; 应将pathToApplication设置为正确且完整,例如/ applications / GUIapp

该方法必须在您的助手应用程序中实现,因此对用户激活的反应也必须在该应用程序中实现。

我假设您已经为NSUserNoticationCenter设置了Delegate,所以将收到userNotificationCenter:didActivateNotification:。 该链接的讨论部分https://developer.apple.com/library/mac/documentation/Foundation/Reference/NSUserNotificationCenterDelegate_Protocol/Reference/Reference.html#jumpTo_3解释了如何接收和提取“ userInfo”字典中的信息,您可以将其与信息一起提供,哪个应用程序将做出反应,请参阅userInfo的此链接https://developer.apple.com/library/mac/documentation/Foundation/Reference/NSUserNotification_Class/Reference/Reference.html#jumpTo_17

我没有用过NSUserNotifications,但是也许这也有助于NSUserNotificationCenter消除通知

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM