Windows Phone 8通知和后台任务

问题描述:

我搜索了官方论坛和文档以及所有其他地方,但一直未能找到具体答案。Windows Phone 8通知和后台任务

问:在Windows Phone 8中,应用程序是否可以响应推送通知,并在后台执行任务?

至于我能理解,为面包和瓷砖通知,当应用程序是不是在前台,没有挂钩它能够对进入的消息作出响应,在所有。

我认为“原始通知”是正确的选择,因为我不需要更新应用程序磁贴,甚至不需要显示Toast通知。但是,如果我能做到这一点,我一直无法找到一个例子,或者在文件中。

我发现几个环节,其谈谈做这个的Windows Store应用程序,但我想找出这是否可以为的Windows Phone 8来完成。

我已经检查这个其他线程,

Windows Phone 8 Background Task with notifications

如果答案的一个建议,WhatsApp的实际上有这样的黑客,在收到推送通知后,下载的消息。所以,是我的问题的答案,NO

+0

我遇到了同样的问题。但是,我如何从Bing新闻接收Toast通知,我甚至不使用他们的应用程序?如果我可以从Bing新闻应用程序的后台任务获得通知,那么理论上它也应该与我的代码一起工作。 –

张贴这在Windows Phone的8.1改变。从Raw notification overview (Windows Runtime apps)

接听原始通知

有两种途径,通过它您的应用程序可以接收原始 通知:

  • 通过通知传递的事件,而你的应用程序运行。
  • 如果您的应用程序启用后台任务,则通过原始通知触发后台任务。

应用程序可以使用这两种机制来接收原始通知。如果一个应用程序 实现两个通知传递的事件处理程序和背景由原始通知触发 任务,通知 交付事件将应用程序运行时优先。

  • 如果应用程序正在运行,通知传递事件将优先于后台任务,并且应用程序将有第一次处理通知的机会。
  • 通知传递事件处理程序可以通过将事件的PushNotificationReceivedEventArgs.Cancel属性设置为true来指定一旦处理程序退出,就不应将原始通知传递给其后台任务。如果Cancel属性设置为false或未设置(默认值为false),则原始通知将在通知传递事件处理程序完成其工作后触发后台任务。
+0

虽然我还没有尝试过这个,但文档清楚地说现在这是可能的。所以,我正在改变接受的答案,只是相信你所解释的内容,并且在提到你所选择的链接之后。谢谢。 :) –

回答你的问题不完全是“NO”, 你是对的WhatsApp使用破解了这一点, WhatsApp的someyow使用AudioAgent,因为他们被允许在后台运行,

我不知道究竟怎么了他们这样做,我也搜索了相同的答案,让我们来看看,如果我找到的东西在这里

+0

感谢您的回答。我会等待更多的时间来看看我们能否得到更具体的答案,否则现在会接受你的答案。 –

这里是在后台接收推送通知的Windows Phone 8.1的完整指南:

  1. 得到一个推送通知通道URI:

    PushNotificationChannel _channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync(); 
    
    string ChannelUri = _channel.Uri; 
    

制作确定你确实通过记录来获取URI。保存URI并在每次启动应用程序时运行它,因为URI经常更新。

  1. 创建解决方案内的Windows运行时组件项目: 右键单击解决方案 - >添加 - >新建项目 - >选择 “Windows运行时组件(Windows手机)”。称这个项目为“任务”或任何你喜欢的。

  2. 创建一个新类,在新创建的项目中扩展IBackgroundTask。我打电话给我的 “NotificationReceiver”:

    using Windows.ApplicationModel.Background; 
    
    namespace Tasks { 
        public sealed class NotificationReceiver : IBackgroundTask { 
         public void Run(IBackgroundTaskInstance taskInstance) { 
          // TODO: implement your task here 
         } 
        } 
    } 
    
  3. 你的任务将在这里实现内部 “运行” 功能。

    1. 参考您的运行时组件在您的主项目: 点击您的Windows Phone项目 - >右键点击“引用” - >添加引用 - >勾选您的运行时组件,然后按好。

    2. 编辑您的应用清单: 双击您的包清单 - >声明 - >添加“位置”和“推送通知”到支持的任务类型,将您的后台任务类名称添加到入口点:调用mine “Tasks.NotificationReceiver”。保存您的更改。

    3. 每次启动应用程序时取消注册并注册您的后台任务。我给了完整的解决方案,只需拨打 “setupBackgroundTask()”:

      private void setupBackgroundTask() { 
          requestAccess(); 
          UnregisterBackgroundTask(); 
          RegisterBackgroundTask(); 
      } 
      
      private void RegisterBackgroundTask() { 
          BackgroundTaskBuilder taskBuilder = new BackgroundTaskBuilder(); 
          PushNotificationTrigger trigger = new PushNotificationTrigger(); 
          taskBuilder.SetTrigger(trigger); 
      
          taskBuilder.TaskEntryPoint = "Tasks.NotificationReceiver"; 
          taskBuilder.Name = "pushTask"; 
      
          try { 
           BackgroundTaskRegistration task = taskBuilder.Register(); 
           Logger.log("TASK REGISTERED"); 
          } catch (Exception ex) { 
           Logger.log("FAILED TO REGISTER TASK"); 
           UnregisterBackgroundTask(); 
          } 
      } 
      
      private bool UnregisterBackgroundTask() { 
          foreach (var iter in BackgroundTaskRegistration.AllTasks) { 
           IBackgroundTaskRegistration task = iter.Value; 
           if (task.Name == "pushTask") { 
            task.Unregister(true); 
            Logger.log("TASK UNREGISTERED"); 
            return true; 
           } 
          } 
          return false; 
      } 
      
      private async void requestAccess() { 
          BackgroundAccessStatus backgroundStatus = await BackgroundExecutionManager.RequestAccessAsync(); 
      } 
      
    4. 让你的任务里面RawNotification对象:

      RawNotification notification = (RawNotification) taskInstance.TriggerDetails; 
      
    开始=“4”>
开始=>