同一个应用程序的两个Toast通知。它如何被设备优先处理和处理?

时间:2012-08-28 14:01:49

标签: c# windows-phone-7.1 toast

我有一个应用程序可以(可能)一个接一个地向用户显示两个Toast通知。我观察到,如果出现这种情况,则只向用户显示两个通知中的一个,但是一旦用户启动应用程序,然后在消息框中向用户呈现相同的通知,并且如果他点击第一个消息的“取消”并且然后会显示下一个通知。所以,我现在的疑问是,如果有两个Toast通知,那么设备将如何处理它?以及哪两个显示给用户?如果只向用户显示通知(默认设备的行为),那么有没有办法一个接一个地显示通知?

这与此 QUESTION 类似,但我想知道WP7手机的行为,因为WP7的功能与其他智能手机操作系统截然不同。

所有建议,评论和答案都表示赞赏。 谢谢

2 个答案:

答案 0 :(得分:1)

Windows Phone 7有可能显示这两个消息,哪一个首先取决于手机首先接收的消息。

如果您查看此页面上的图表http://msdn.microsoft.com/en-us/library/windowsphone/develop/ff402558(v=vs.92).aspx,您会发现在发送推送(toast,tile或raw)通知时有很多通信。它取决于微软推送通知服务,它通常先发送它。

因此,从它的声音来看,我会尝试限制应用程序发送Toast通知的方式。因此,检查是否在一定时间内向手机发送了一个Toast通知,如果持续发送下一个通知,直到该时间已经过去。

还要记得检查MPNS是否实际发送了推送通知,这将有助于确定手机是否收到了通知

在该链接中,我发布了有关发送和接收推送通知的大量详细信息。

答案 1 :(得分:0)

我做的是这个,

 public static void ShowToast()
    {
        try
        {
            string langKey = CacheManager.getInstance().getDataFromConfigFile(CacheManager.APP_CURRENT_LANGUAGE);
            string flag = CacheManager.getInstance().getDataFromConfigFile(CacheManager.APP_UPGRADE_STATUS);
            string catalogUpdateFlag = CacheManager.getInstance().getDataFromConfigFile(CacheManager.APP_CATALOG_UPGRADE_STATUS);

            CultureInfo ci;
            if ((null == langKey) || (langKey.Equals(Utils.LANGUAGE_EN)))
            {
                ci = new CultureInfo("en-US");
            }
            else
            {
                ci = new CultureInfo("fr-FR");
            }
            AppResources.Culture = ci;

            if (!Utils.isNullString(flag))
            {
                var toast = new ShellToast
                {
                    Title = AppResources.APP_NAME,
                    Content = getMessageStatus(flag),
                    NavigationUri = new System.Uri("/MainPage.xaml", System.UriKind.Relative)
                };

                Logger.log(TAG, ":ShowToast():MessageToUser" + AppResources.APP_NAME + getMessageStatus(flag));


                toast.Show();
            }
            if (!Utils.isNullString(catalogUpdateFlag))
            {
                var toast = new ShellToast
                {
                    Title = AppResources.APP_NAME,
                    Content = getMessageStatus(catalogUpdateFlag),
                    NavigationUri = new System.Uri("/MainPage.xaml", System.UriKind.Relative)
                };

                Logger.log(TAG, ":ShowToast():MessageToUser" + AppResources.APP_NAME + getMessageStatus(catalogUpdateFlag));


                toast.Show();
            }
        }
        catch (Exception ex)
        {

            Logger.log(TAG, "Exception in ShowToast: " + ex.Message + "\n" + ex.StackTrace);

        }
    }
    private static string getMessageStatus(string flagType)
    {
        //string flag = CacheManager.getInstance().getApplicationSettings(CacheManager.APP_UPGRADE_STATUS);
        string flag = CacheManager.getInstance().getDataFromConfigFile(CacheManager.APP_UPGRADE_STATUS);
        string catalogUpdateFlag = CacheManager.getInstance().getDataFromConfigFile(CacheManager.APP_CATALOG_UPGRADE_STATUS);

        if (flagType == flag)
        {
            if (flag.Equals(CacheManager.MAJOR_UPGRADE))
            {
                return AppResources.APP_UPGRADE_CONFIRM;
            }

            else if (flag.Equals(CacheManager.MINOR_UPGRADE))
            {
                return AppResources.APP_UPGRADE_MINOR_CONFIRM;
            }
        }
        else if (flagType == catalogUpdateFlag)
        {
            return AppResources.APP_CATALOG_CONFIRM;
        }
        return "";
    }

我已经采用了两个不同的变量来了解它是应用程序升级还是只是目录升级(新项目将添加到现有项目中)。因此,如果有目录升级和/或应用程序升级,将通知用户。