我自己不是Windows Phone开发人员,所以我提前为我缺乏知识而道歉。
我们为客户提供的产品之一是来电显示应用。该软件执行以下操作:
我们在Android和Symbian上实现了应用程序,它运行良好。我想知道在Windows Phone上是否可以使用这种类型的应用程序。据我们的分包商说,以前的版本并非如此。我想知道这是否真的如果WP8中的情况发生了变化。
我的问题:
根据我用Google搜索,我发现只提到“模糊”事件,没有关于“呼叫”事件或类似事件。这不是很有希望,但我想听听实际开发人员的意见。
答案 0 :(得分:1)
是(查看“后台代理”,http://www.jeffblankenburg.com/2011/11/25/31-days-of-mango-day-25-background-agents/)。
您应该从那里开始,然后执行与您的应用规范相关的更多独立研究。
Per Jeff的文章:
启动Visual Studio并创建一个新项目。在Silverlight for Windows Phone下,选择Windows Phone应用程序。将其命名为“MyAgentApp”。
您现在已经创建了主应用程序。它将负责两件事:
1)拥有后台代理可以使用信息更新的实时磁贴
2)启动和停止后台代理
后台代理本身必须存在于自己的特殊项目中。在解决方案中添加新项目,选择Windows Phone Scheduled Task Agent。将其命名为MyAgent。此项目将包含将在后台运行的自定义代码并更新实时磁贴。
最后,这很重要,请转到MyAgentApp项目并向MyAgent添加项目引用。这将允许您从应用程序中注册您的代理。另外,请注意在WMAppManifest.xml中自动创建的条目:
<Tasks>
<DefaultTask Name="_default" NavigationPage="MainPage.xaml" />
<ExtendedTask Name="BackgroundTask">
<BackgroundServiceAgent Specifier="ScheduledTaskAgent" Name="MyAgent" Source="MyAgent" Type="MyAgent.ScheduledAgent" />
</ExtendedTask>
</Tasks>
现在是时候实际连接所有内容了。打开MainPage.xaml并添加两个按钮,一个用于启动代理,另一个用于停止代理:
<StackPanel VerticalAlignment="Center">
<Button Content="Start Background Agent"
Click="StartButton_Click"/>
<Button Content="Stop Background Agent"
Click="StopButton_Click"/>
</StackPanel>
在MainPage.xaml.cs中,连接按钮以启动和停止代理:
private const string TASK_NAME = "MyAgent";
private void StartButton_Click(object sender, RoutedEventArgs e)
{
StartAgent();
}
private void StopButton_Click(object sender, RoutedEventArgs e)
{
StopAgentIfStarted();
}
private void StartAgent()
{
StopAgentIfStarted();
PeriodicTask task = new PeriodicTask(TASK_NAME);
task.Description = "This is our custom agent for Day 25 - Background Agents";
ScheduledActionService.Add(task);
#if DEBUG
// If we're debugging, attempt to start the task immediately
ScheduledActionService.LaunchForTest(TASK_NAME, new TimeSpan(0, 0, 1));
#endif
}
private void StopAgentIfStarted()
{
if (ScheduledActionService.Find(TASK_NAME) != null)
{
ScheduledActionService.Remove(TASK_NAME);
}
}
请注意,要创建自定义代理,我们将创建一个新的PeriodicTask。然后,我们在查找和停止代理时使用该名称作为标识符。另请注意,我们指定了PeriodicTask.Description - 这是必填字段,将显示在Settings |中背景任务以我们的应用程序的名义。
在MyAgent项目中,打开ScheduledAgent.cs并添加以下代码:
protected override void OnInvoke(ScheduledTask task)
{
UpdateAppTile(GetLastUpdatedTimeMessage());
}
private string GetLastUpdatedTimeMessage()
{
return string.Format("Last Updated: {0}", DateTime.Now);
}
private void UpdateAppTile(string message)
{
ShellTile appTile = ShellTile.ActiveTiles.First();
if (appTile != null)
{
StandardTileData tileData = new StandardTileData
{
BackContent = message
};
appTile.Update(tileData);
}
}
ScheduledAgent有一个重要的方法来覆盖 - OnInvoke。这是您的代理将执行其后台任务的位置。如果您的任务已完成且您不再需要代理运行,则可以调用NotifyComplete()来表示任务已成功完成,或者Abort()表示您正在取消您的任务。为了让任务以一定的间隔运行,只需不要调用,这就是我们在这里所做的。