Параметры всплывающих уведомлений в Windows Phone 8.1 Silverlight

Итак, я использую новый ToastNotificationManager в своем проекте 8.1 SL вместо старого ShellToast. ShellToast содержал NavigationUri во всплывающем сообщении, что делало его действительно простым.

В новых тостах необходимо самостоятельно указать параметры запуска согласно эту статью. Однако похоже, что в 8.1 SL нет события OnLaunched(LaunchActivatedEventArgs args), которое вы должны прослушивать в App.xaml.cs для параметров:

Шаг 2. Обработайте событие приложения OnLaunched.

Когда пользователь нажимает на всплывающее уведомление или выбирает его касанием, соответствующее приложение запускается, вызывая событие OnLaunched.

Примечание. Если вы не включили строку атрибута запуска в всплывающее уведомление и ваше приложение уже запущено, когда всплывающее уведомление выбрано, событие OnLaunched не запускается.

В этом примере показан синтаксис для переопределения события OnLaunched, в котором вы будете получать строку запуска, предоставленную во всплывающем уведомлении, и действовать в соответствии с ней.

protected override void OnLaunched(LaunchActivatedEventArgs args)
{
    string launchString = args.Arguments

    ....
}

Мой код:

// Using the ToastText02 toast template.
ToastTemplateType toastTemplate = ToastTemplateType.ToastText02;

// Retrieve the content part of the toast so we can change the text.
XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate);

//Find the text component of the content
XmlNodeList toastTextElements = toastXml.GetElementsByTagName("text");

// Set the text on the toast. 
// The first line of text in the ToastText02 template is treated as header text, and will be bold.
toastTextElements[0].AppendChild(toastXml.CreateTextNode("Heading"));
toastTextElements[1].AppendChild(toastXml.CreateTextNode("Body"));

// Set the duration on the toast
IXmlNode toastNode = toastXml.SelectSingleNode("/toast");
((XmlElement)toastNode).SetAttribute("duration", "long");

//Launch params
string paramString = "{\"type\":\"toast\",\"param1\":\"12345\"}";
((XmlElement)toastXml.SelectSingleNode("/toast")).SetAttribute("launch", paramString);

// Create the actual toast object using this toast specification.
ToastNotification toast = new ToastNotification(toastXml);

// Set SuppressPopup = true on the toast in order to send it directly to action center without 
// producing a popup on the user's phone.
toast.SuppressPopup = true;

// Send the toast.
ToastNotificationManager.CreateToastNotifier().Show(toast);

Кто-нибудь знает, как это решить? Спасибо


person robertk    schedule 24.04.2014    source источник
comment
Вы можете предоставить всплывающее уведомление с параметром навигации напрямую. Подробности узнаю завтра, когда вернусь на работу. Странно, что мы не задокументировали это должным образом.   -  person Claus Jørgensen    schedule 25.04.2014
comment
Спасибо жду с нетерпением! :)   -  person robertk    schedule 25.04.2014
comment
Если вы используете ToastNotificationManager в Silverlight 8.1, что вы используете вместо события OnLoaded, поскольку SL не имеет его в App.xaml? У меня есть это в OnNavigatedTo, но, кажется, он вызывает его дважды, когда нажимается тост. Я использую ответ для триггера загрузки ниже.??   -  person gcoleman0828    schedule 09.06.2015


Ответы (1)


Ваша проблема в том, что вы устанавливаете неправильный параметр launch. Вы должны установить его непосредственно на страницу, на которую хотите перейти.

var toastNavigationUriString = ""#/MainPage.xaml?param1=12345";
var toastElement = ((XmlElement)toastXml.SelectSingleNode("/toast"));
toastElement.SetAttribute("launch", toastNavigationUriString);
person Claus Jørgensen    schedule 25.04.2014
comment
Где вам нужно определить метод protected override void OnLaunched(LaunchActivatedEventArgs args) в приложении WP 8.1 SilverLight? (В App.xaml.cs указано, что нет метода для переопределения) - person Shishir Gupta; 21.06.2014
comment
@ShishirGupta Нет, этот метод используется исключительно для универсальных приложений. Для Silverlight 8.1 вы просто передаете полный uri прямо на страницу, на которую хотите войти, как в моем примере. - person Claus Jørgensen; 21.06.2014
comment
@ClausJørgensen Что, если мы не хотим переходить на какую-либо страницу, но хотим отправить некоторые данные с помощью всплывающего уведомления? - person loop; 08.12.2014
comment
@loop Вы должны всегда переходить на страницу в своем приложении при нажатии всплывающего уведомления. В противном случае он не пройдет сертификацию. - person Claus Jørgensen; 08.12.2014
comment
@ClausJørgensen спасибо, Клаус, еще одна вещь - данные должны передаваться в uri как параметр, верно? - person loop; 08.12.2014
comment
Учитывая, что это кросс-процесс, это фактически ваш единственный вариант. - person Claus Jørgensen; 08.12.2014
comment
Как обращаться с классом JavaScript или компонента среды выполнения Windows в Windows Phone 8.1? - person Kishor Bikram Oli; 09.08.2015