3

(おそらく) 2 つのトースト通知をユーザーに次々に表示できるアプリがあります。このようなシナリオが発生した場合、2 つの通知のうちの 1 つだけがユーザーに表示されますが、ユーザーがアプリを起動すると、同じ通知がメッセージ ボックスに表示され、最初のメッセージで [キャンセル] をクリックすると、その後、次の通知が表示されます。だから、私の疑問は、トースト通知が2つある場合、デバイスはそれをどのように処理するのでしょうか? 2 つのうちどちらがユーザーに表示されますか? また、ユーザーに通知のみが表示される場合 (デバイスのデフォルトの動作による)、通知を次々に表示する方法はありますか?

これはこの質問に似ていますが、WP7の機能は他のスマートフォンOSとは大きく異なるため、WP7電話の動作を知りたいです。

すべての提案、コメント、回答を歓迎します。ありがとうございました

4

2 に答える 2

1

Windows Phone 7 には両方のメッセージが表示される可能性があり、どちらが最初に表示されるかは、電話がどちらを最初に受信するかによって異なります。

このページhttp://msdn.microsoft.com/en-us/library/windowsphone/develop/ff402558(v=vs.92).aspxの図を見ると、送信時に多くの通信があることがわかりますプッシュ (トースト、タイル、または生) 通知。また、通常は先着順で送信する Microsoft プッシュ通知サービスに依存します。

その音から、アプリケーションがトースト通知を送信する方法を制限することを検討します。そのため、一定時間内にトースト通知が電話に送信されたかどうかを確認し、送信された場合は、その時間が経過するまで次の送信を保留します。

また、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 "";
    }

アプリケーションのアップグレードなのか、カタログのアップグレードだけなのかを知るために、2つの異なる変数を使用しました(新しいアイテムが既存のアイテムに追加されます)。したがって、カタログのアップグレードやアプリケーションのアップグレードがある場合は、ユーザーに通知されます。

于 2012-08-29T04:44:45.553 に答える