1

GUI アプリがアクティブでないときにアクティブなヘルパー アプリケーションがあります。ヘルパー アプリケーションは [NSUserNotificationCenter defaultNotificationCenter] に通知を送信しています。ユーザーがヘルパーからの通知を有効にしたときに、GUI アプリを開いてもらいたいです。これを行う方法はありますか?

また、ヘルパー アプリがメイン アプリと同じ名前の通知を投稿することを希望しますが、それは didActivateNotification: を適切な実行可能ファイルに送信するよりも問題は少なくなります。

4

2 に答える 2

1

通知の投稿は、これらの通知を受信するように登録されている実行中のアプリでのみ機能します。

GUI アプリを起動する場合は、[ [ NSWorkspace sharedWorkSpace] launchApplication: pathToApplication]; を使用できます。pathToApplication は正しく完全に設定する必要があります (例: /applications/the 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 の通知を却下するのにも役立ちます。

于 2014-04-04T08:54:06.473 に答える
1

デリゲート メソッドで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 スキームを登録し、 NSWorkspace の openURL を使用する方法があります。このようにして、メイン アプリでさまざまな動作をトリガーする単純なアクション/パラメーター文法を定義できます。

于 2014-04-04T08:50:06.527 に答える