我正在使用后台任务在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)