1

私はバックグラウンドタスクでトースト通知を表示できるアプリケーションを作成しています(私はBackgroundTaskBuilderを使用しています)。通知で私は2つの異なる機能を行う必要がありますが、私は通知の応答を得ることはできません2つのボタンを使用しています。バックグラウンドタスクでトースト通知応答

バックグラウンドタスクで別のバックグラウンドタスクを開始する必要があることをインターネットで読み取ったが、バックラウンドタスクで別のバックグラウンドタスクを開始できない。

私の質問は次のとおりです。どのようなボタンを通知でクリックしたのですか?

ありがとうございました。

+0

これは役に立ちそうです: http://www.kunal-chowdhury.com/2016/02/uwp-tips-toast-button.html –

答えて

5

Windows 10では、トースト通知のアクティブ化をフォアグラウンドまたはバックグラウンドから処理できます。 Windows 10では、<action>要素にactivationTypeという属性を持つ適応型および対話型の通知を導入しています。この属性を使用して、このアクションがどのような種類の起動を行うかを指定できます。例えば、以下のトーストを使用すると、ユーザは「詳細を参照」ボタンをクリックすると

<toast launch="app-defined-string"> 
    <visual> 
    <binding template="ToastGeneric"> 
     <text>Microsoft Company Store</text> 
     <text>New Halo game is back in stock!</text> 
    </binding> 
    </visual> 
    <actions> 
    <action activationType="foreground" content="See more details" arguments="details"/> 
    <action activationType="background" content="Remind me later" arguments="later"/> 
    </actions> 
</toast> 

enter image description here

は、それがフォアグラウンドにアプリをもたらすでしょう。 Application.OnActivated methodが呼び出され、新しいactivation kind-ToastNotificationが追加されます。以下のように、我々はこの活性化を扱うことができます。

protected override void OnActivated(IActivatedEventArgs e) 
{ 
    // Get the root frame 
    Frame rootFrame = Window.Current.Content as Frame; 

    // TODO: Initialize root frame just like in OnLaunched 

    // Handle toast activation 
    if (e is ToastNotificationActivatedEventArgs) 
    { 
     var toastActivationArgs = e as ToastNotificationActivatedEventArgs; 

     // Get the argument 
     string args = toastActivationArgs.Argument; 
     // TODO: Handle activation according to argument 
    } 
    // TODO: Handle other types of activation 

    // Ensure the current window is active 
    Window.Current.Activate(); 
} 

をユーザが「後で通知する」ボタンをクリックすると、それは代わりにフォアグラウンドアプリを起動させるのバックグラウンドタスクをトリガーします。したがって、バックグラウンドタスクで別のバックグラウンドタスクを開始する必要はありません。

背景通知をトースト通知から処理するには、バックグラウンドタスクを作成して登録する必要があります。 バックグラウンドタスクは、"システムイベント"タスクとしてアプリケーションマニフェストで宣言し、そのトリガーをToastNotificationActionTriggerに設定する必要があります。その後、バックグラウンドタスク、同様にクリックされたボタンを決定するために事前定義された引数を取得するためにToastNotificationActionTriggerDetailを使用中:詳細情報については

public sealed class NotificationActionBackgroundTask : IBackgroundTask 
{ 
    public void Run(IBackgroundTaskInstance taskInstance) 
    { 
     var details = taskInstance.TriggerDetails as ToastNotificationActionTriggerDetail; 

     if (details != null) 
     { 
      string arguments = details.Argument; 
      // Perform tasks 
     } 
    } 
} 

Adaptive and interactive toast notificationsを参照してください、特にHandling activation (foreground and background)。 GitHubのthe complete sampleもあります。

+0

返信いただきありがとうございます!私はこれを理解していますが、バックグラウンドタスクで通知を作成して表示する場合、ToastNotificationActionTriggerのために別のタスクを開始するにはどうしたらいいですか? –

+0

@SüliPatrik[公式サンプル](https://github.com/WindowsNotifications/quickstart-sending-local-toast-win10)の 'ToastNotificationBackgroundTask'のような新しいバックグラウンドタスクを追加し、' ToastNotificationBackgroundTask'を登録する必要があります。その後、元のバックグラウンドタスクでトースト通知を送信できます。例えば、公式サンプルの 'ButtonSendToast_Click'メソッドのようにトーストを送ると仮定しましょう。次に、トーストの「好き」ボタンをクリックすると、ToastNotificationActionTriggerがトリガーされます。 'ToastNotificationBackgroundTask'が始まります。 –

+2

@SüliPatrikあなたはオリジナルのバックグラウンドタスクで 'ToastNotificationBackgroundTask'を起動しませんが、トースト通知をクリックすると' ToastNotificationBackgroundTask'が開始され、このバックグラウンドタスクでは 'details.Argument '。 –

関連する問題