我正在使用后台任务在Windows Phone 8.1上创建实时聊天应用程序。该应用程序注册后台任务并触发它,它正常工作。
我的问题是如何在前台进程和后台任务之间交换一些运行时消息?“
我已经看到API windows.applicationmodel.chat 也是如此,但这是使用 Microsoft的API 。
我们如何使用我们自己的API实现它?
我的意思是有任何方法可以在前台进程和后台任务之间交换运行时数据。
答案 0 :(得分:0)
我构建了一个后台音频应用程序,下面提到的MSDN示例代码对我帮助很大。
这会在后台任务中运行音频文件,并帮助我们了解要处理的事件。 http://code.msdn.microsoft.com/windowsapps/BackgroundAudio-63bbc319
此外,它将让您清楚地了解如何将数据从前台任务传递到后台任务,反之亦然。
EG。从这个应用程序: 每当后台应用程序更改轨道时,它就会向前台应用程序发送消息,如
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);
}
同样,后台应用可以收听Foreground app中的事件:
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)