Откройте основное приложение с помощью NSUserNotification, отправленного помощником

У меня есть вспомогательное приложение, которое активно, когда приложение с графическим интерфейсом не работает. Вспомогательное приложение отправляет уведомления в [NSUserNotificationCenter defaultNotificationCenter]. Я хотел бы, чтобы приложение с графическим интерфейсом было открыто, когда пользователь активирует уведомление от помощника. Есть ли способ сделать это?

Я бы также предпочел, чтобы вспомогательное приложение публиковало уведомления с тем же именем, что и основное приложение, но это не такая проблема, как отправка didActivateNotification: в нужный исполняемый файл.


person stevesliva    schedule 03.04.2014    source источник


Ответы (2)


Вы можете просто открыть основное приложение через NSWorkspace в методе делегата didActivateNotification::

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

Это откроет приложение по указанному URL-адресу, если оно не запущено, или выведет его на передний план, если оно уже открыто.

Альтернативным подходом может быть регистрация пользовательской схемы URL в ваше основное приложение и используйте openURL NSWorkspace. Таким образом, вы можете определить простую грамматику действия/параметра, которая вызывает различное поведение в вашем основном приложении.

person Thomas Zoechling    schedule 04.04.2014
comment
Хороший ответ. Во-первых, да, пусть помощник запускает основное приложение, но затем вам нужно передать аргументы запуска или что-то еще, чтобы передать информацию об уведомлении. Я думаю, что схема URL - это самый хитрый способ, если бы я придерживался того, чтобы помощник публиковал уведомления. В итоге я углубился в выяснение того, как заставить приложение с графическим интерфейсом переходить в фоновый режим при закрытии и повторно запускать графический интерфейс с уведомлениями. - person stevesliva; 04.04.2014

Публикация уведомлений работает только с запущенными приложениями, которые зарегистрированы для получения этих уведомлений.

Если вы хотите запустить приложение с графическим интерфейсом, вы можете использовать [ [ NSWorkspace sharedWorkSpace] launchApplication: pathToApplication]; pathToApplication должен быть установлен правильно и полностью, например. /приложения/графическое приложение

Метод должен быть реализован в вашем вспомогательном приложении, поэтому там также должна быть реализована реакция на активацию пользователя.

Я предполагаю, что вы установили делегата для NSUserNotificationCenter, поэтому получен 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 отклонить уведомление.

person macrene    schedule 04.04.2014
comment
Спасибо. Я использовал диктофон userInfo, поэтому я надеялся доставить его в приложение с графическим интерфейсом от помощника. Увы. - person stevesliva; 04.04.2014