前台进程和后台任务之间的Windows phone消息交换



我正在使用后台任务在Windows Phone 8.1上创建一个实时聊天应用程序。应用程序注册后台任务并触发它,它工作正常。

我的问题是如何在前台进程和后台任务之间交换一些运行时消息?"

我看到APIwindows.applicationmodel.chat也这样做,但这是使用微软的API

我们如何使用自己的一套API实现它

我的意思是,有没有任何方法可以在前台进程和后台任务之间交换运行时数据。

我构建了一个后台音频应用程序,下面提到的MSDN示例代码对我帮助很大。

这将在后台任务中运行音频文件,并帮助我们了解要处理的事件。http://code.msdn.microsoft.com/windowsapps/BackgroundAudio-63bbc319

此外,它还将让您清楚地了解如何将数据从前台任务传递到后台任务,反之亦然。

例如。从此应用程序:每当后台应用程序更改轨道时,它都会向前台应用程序(如)发送消息

 ApplicationSettingsHelper.SaveSettingsValue(Constants.CurrentTrack, sender.CurrentTrackName);
 if (foregroundAppState == ForegroundAppStatus.Active)
 {
            //Message channel that can be used to send messages to foreground
            ValueSet message = new ValueSet();
            message.Add(Constants.Trackchanged, sender.CurrentTrackName);
            BackgroundMediaPlayer.SendMessageToForeground(message);
 }

类似地,后台应用程序可以收听来自前景应用程序的事件:

 void BackgroundMediaPlayer_MessageReceivedFromForeground(object sender, MediaPlayerDataReceivedEventArgs e)
    {
        foreach (string key in e.Data.Keys)
        {
            switch (key.ToLower())
            {
                case Constants.AppSuspended:
                    Debug.WriteLine("App suspending"); // App is suspended, you can save your task state at this point
                    foregroundAppState = ForegroundAppStatus.Suspended;
                    ApplicationSettingsHelper.SaveSettingsValue(Constants.CurrentTrack, Playlist.CurrentTrackName);
                    break;
                case Constants.AppResumed:
                    Debug.WriteLine("App resuming"); // App is resumed, now subscribe to message channel
                    foregroundAppState = ForegroundAppStatus.Active;
                    break;
                case Constants.StartPlayback: //Foreground App process has signalled that it is ready for playback
                    Debug.WriteLine("Starting Playback");
                    StartPlayback();
                    break;
               case Constants.SkipNext: // User has chosen to skip track from app context.
                    Debug.WriteLine("Skipping to next");
                    SkipToNext();
                    break;
                case Constants.SkipPrevious: // User has chosen to skip track from app context.
                    Debug.WriteLine("Skipping to previous");
                    SkipToPrevious();
                    break;
            }
        }
    }

我建议您仔细阅读代码以更好地理解它。我花了一段时间,但我必须说,这是MSDN上的一个很好的例子。

注意:这适用于Windows Phone 8.1运行时应用程序(而不是Silverlight)

最新更新