3

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

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

感谢所有建议,评论和答案。谢谢你

4

2 回答 2

1

Windows Phone 7 有可能同时显示这两种消息,而先显示哪一条取决于手机先收到哪一条。

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

因此,从它的声音来看,我会考虑尝试限制您的应用程序如何发送 toast 通知。因此,请检查是否在一定时间内向手机发送了 toast 通知,如果是,请保持发送下一个通知,直到该时间过去。

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

在那个链接中,我发布了很多关于发送和接收推送通知的细节。

于 2012-08-28T14:28:38.897 回答
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 "";
    }

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

于 2012-08-29T04:44:45.553 回答