移动运营商通知和系统事件_第1页
移动运营商通知和系统事件_第2页
移动运营商通知和系统事件_第3页
移动运营商通知和系统事件_第4页
移动运营商通知和系统事件_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

移动运营商通知和系统事件摘要本白皮书提供有关Windows8的移动运营商通知系统事件的信息。它向移动运营商提供了用于开发移动宽带Metro风格应用的指南,从而可以有效处理基于SMS或USSD的传入移动运营商通知和相关移动宽带系统事件。本书假定读者熟悉Windows移动宽带平台和Metro风格应用开发的基本概念。该信息适用于以下操作系统:

Windows8 此处讨论的参考和资源均会在本书末尾部分列出。本白皮书的当前版本在以下Web维护:

移动运营商通知和系统事件免责声明:本文档按“原样”提供。本文档中所表达的信息和观点(包括URL和其他Internet网站引用)如有更改,恕不另行通知。有些信息涉及预发行的产品,它在商业发布之前可能会大幅修改。Microsoft对在这里提供的信息不做任何明示或暗示的担保。使用本文档所带来的风险由你自行承担。此处所描述的一些例子是仅为演示的目的而虚构。与真实世界无实际关联,也不应以此作为推断。本文档不赋予任何Microsoft产品中的知识产权的法律权利。你可以复制和使用本文件作为内部参考。©2021Microsoft。保留所有权利。文档历史记录日期更改2021年8月15日更新了“ProfileConnected和ProfileDisconnected”中的信息,增加了有关“在元数据中更改后台任务注册”和“验证是否已成功应用设置元数据”的信息,并且在“未将收到的短信检测为运营商通知”中增加了信息2021年6月8日阐明了ProfileConnected消息类型的传递时间2021年5月31日2021年2月28日首次发表目录简介客户在Windows8上对运营商品牌的主要体验为Metro风格移动宽带设备应用。此应用不应该用于提供主要的连接管理功能,而是应该提供帐户管理体验和服务体验。为了让用户可以接收其帐户状态的通知,应用需要执行某些活动,即使在用户未与其交互时也是如此。这些活动包括对运营商SMS或网络启动的USSD消息的响应,通知用户他们已接近其数据限制,通知用户其数据计划已到期以及通知用户其漫游状态。Windows8中的后台代理工作项Windows8引入了以全屏方式运行的Metro风格应用,其中包括Metro风格移动宽带设备应用。最终用户仅可以以前台方式与应用程序进行交互。前台应用被假定为对用户最重要,以便此应用接收所有系统资源。如果应用不在前台,则应用将挂起且无法运行任何代码。挂起的应用在用户通过将应用带回前台以恢复该应用前保持的挂起状态。采用这样的应用行为模型,用户体验不会受到由于执行不重要的后台应用而导致的滞后或延迟的影响。此外,减少不必要的后台活动可优化各种机型上的电池的寿命。恢复挂起的应用所花费时间可以忽略不计,并且几乎不会被大部分用户察觉。Windows8提供可用于保持应用磁贴最新和更新(即使在该应用挂起时)的Windows推送通知。推送通知针对系统性能和更长的设备电池寿命进行了优化,因此最好尽可能使用Windows推送通知。如果挂起的应用必须运行自己的代码来执行其他类型的工作,则Windows8为该应用提供创建后台任务的功能。尽管在Metro风格应用不在前台运行时该应用无法运行任何代码,但

Windows8中的系统事件代理将提供一个机制让位于后台的应用运行响应事件的代码。应用可以使用系统事件代理注册工作项以响应特定后台代理的事件。当触发后台代理的事件时,Windows会运行应用的工作项,而不管该应用当前处于何种状态(活动或挂起)。通常来说,后台事件用于简单触发点,并不针对具有大量处理操作的信号。

同样,每个应用的配额也基于后台事件允许的处理时间。后台事件由网

络运营商API提供,其中包括MobileOperatorNotification事件和

HotspotAuthentication事件,Windows将这些事件视为关键事件。

与Windows8中的常规后台事件相比,与MobileOperatorNotification和HotspotAuthentication事件关联的后台工作项将执行事件的每个实例,而不考虑处理时间配额,尽管后台工作项的每个实例都会受到处理时间配额的限制。应注意,在后台事件处理程序中应仅执行最少的处理并且将较大处理推迟留给应用程序处理。有关HotspotAuthentication后台事件的详细信息,请参阅\hWindows8无线热点运营商集成。术语和定义本书使用以下术语:后台任务由应用实现的类或JavaScript页面,即使在应用不在前台的情况下也可以提供功能。后台触发器系统定义的事件,应用可以将其与后台任务关联。当系统触发触发器时,将启动与该触发器关联的应用后台任务。前台应用用户正在主动与其交互的应用。MobileOperatorNotification场景连接到移动宽带和断开与移动宽带的连接网络运营商消息Windows8中的移动宽带平台仅为运营商的Metro风格设备应用提供可用的增强功能,以接收和显示传入SMS和网络启动的USSD运营商管理消息。这些消息可用于用户通知,例如,接近数据使用量上限、国际漫游或余量不足,或者用于触发来自运营商的应用的响应。应用适当地处理传入消息。可能的响应包括以下任意或全部内容:立即同步当前数据使用量更新Metro风格应用的磁贴检索并应用更新的运营商设置XML向用户显示toast通知,例如:用户可以点击或单击要直接发送给运营商的应用的通知,如下图所示。如果运营商希望在应用中显示消息,则MobileOperatorNotification事件触发的后台任务需要读取消息内容并将消息内容存储至应用自己的本地数据存储中。移动宽带SMS平台不保留过去接收到的管理SMS通知队列。移动网络运营商SMS通知传入SMS消息可用于已请求和授予对电脑上SMS功能的访问权限的所有应用。但是,某些SMS消息直接来自运营商并应限制用于该运营商的应用并由该应用处理。移动宽带SMS平台筛选每个新接收的以下两种类型之一的SMS:来自MNO的管理(“无提示”)SMS通知和常规SMS消息。从移动网络运营商处接收的管理SMS通知仅可由MNOMetro风格应用访问,并在常规SMS客户端应用中隐藏。移动网络运营商在帐户设置元数据中为管理SMS和USSD通知指定自定义筛选规则。如果未指定消息筛选规则,则SMS平台将所有SMS消息分类作为可用于所有应用的常规SMS消息。如果传入SMS与设置的筛选规则相匹配,则触发MobileOperatorNotification事件并且后台工作项可以相应地处理传入SMS消息。网络启动的USSD以本地方式触发数据使用量和漫游通知在许多市场中,监管法律要求移动网络运营商通知用户当达到其数据使用限制时或该用户正在更贵的网络中漫游。此消费者保护措施将减少“帐单震撼”或者非常高的使用费用的风险。在Windows中,运营商的移动宽带应用可以显示toast通知和磁贴更新以确保用户意识到数据使用量和漫游状态。这些通知可通过SMS或USSD从运营商的网络后端启动,这将触发MobileOperatorNotification事件,如上例所示。此外,在以下情况中使用本地信息也可触发MobileOperatorNotification事件。通过本地数据计数器的数据使用量通知运营商通过设置元数据启动本地数据使用量通知。本地数据计数器评估自上次更新后更改量超过用户数据限制5%的配置文件上的使用量。数据使用量和订阅管理器(DUSM)通知系统事件代理触发

MobileOperatorNotification事件。系统事件代理调用运营商的应用来处理后台事件。应用通过从运营商的后端基础结构中检索最新使用量信息来处理事件。如果当前使用量信息超过阈值(例如80%),则应用将向用户显示一个toast通知并用当前使用量更新DUSM。此外,如果当前使用量没有超过阈值,则应用无需显示toast通知。通过Windows连接管理器的漫游通知Windows连接管理器在将连接报告为“漫游”的移动宽带网络上注册。Windows连接管理器通知系统事件代理触发MobileOperator

Notification事件。系统事件代理调用运营商的应用来处理后台事件。应用识别用户在此网络上漫游时是否会产生额外使用费用,并且如果需要会向用户显示一个toast通知和磁贴更新。数据计划到期和使用量重置对于后付费数据计划,DUSM在特定日期将计划数据使用量重置为零,例如每月的第一天。进行重置时,会触发MobileOperatorNotification事件,且应用可以通知用户已更新的数据使用量。MobileOperatorNotification事件详细技术信息事件负载MobileOperatorNotification事件负载包括以下字段:MessageType–触发事件的消息的枚举。Interface–对应于与事件关联的物理接口的GUID。EncodingType–如果MessageType为SMS/USSD,则该字段为消息的编码方法。MessageDataSize–如果MessageType为SMS/USSD,则该字段为消息的大小,以字节为单位。Message–如果MessageType为SMS/USSD,则该字段为收到的原始消息。通过使用事件负载中的MessageType字段区分这些方案,MobileOperatorNotification事件可以启用上述每个方案。对MessageTypes进行枚举,如下所示:GSMSMSCDMASMSUSSDDataPlanThresholdReachedDataPlanResetDataPlanDeletedProfileConnectedProfileDisconnectedRegisteredRoamingRegisteredHome与MobileOperatorNotification事件关联的工作项应从高效区分

MessageType的逻辑开始并为每个方案执行适当的代码。GSM/CDMASMS和USSD传入的运营商消息(包括SMS和USSD)将根据正确对应的MessageTypes触发MobileOperatorNotification事件。只有这些类型具有EncodingType、MessageDataSize和Message。DataPlanThresholdReached默认情况下,此消息类型处于禁用状态。必须通过使用设置元数据指定

DataUsageInMobileOperatorNotificationEnable字段来启用此字段,

如下所示。<?xmlversion="1.0"?><CarrierProvisioningxmlns="/networking/CarrierControl/v1"><Global><CarrierId>{2c85b76b-f859-47c4-8122-721fe8b6c25f}</CarrierId><SubscriberId>012345678901234</SubscriberId></Global><MBNProfiles><DefaultProfilexmlns="/networking/CarrierControl/WWAN/v1"><Name>Contoso</Name><AssociatedPlan>SamplePlan</AssociatedPlan><Context><AccessString>C</AccessString><UserLogonCred><UserName>User</UserName><Password>secret</Password></UserLogonCred></Context></DefaultProfile></MBNProfiles><Plans><Planxmlns="/networking/CarrierControl/Plans/v1"Name="SamplePlan"><DescriptionPlanType="Fixed"><DataLimitInMegabytes>500</DataLimitInMegabytes><DataUsageInMobileOperatorNotificationEnabled>true</DataUsageInMobileOperatorNotificationEnabled></Description></Plan></Plans></CarrierProvisioning>有关其他详细信息,请参阅\h提供移动宽带元数据。除了以下两种情况,当本地数据计数器评估自上次事件发生后在移动宽带接口上的使用量(发送和接收的字节)达到5%的变化时,将使用此MessageType生成事件:当连接到家庭网络(非漫游)时,如果未指定数据计划限制,则每使用100MB本地数据触发此事件一次。当连接到漫游网络时,数据计划限制将不适用,并且每使用5MB本地数据触发此事件一次。Windows8中的本地数据计数器以1分钟的频率进行更新;在上面描述的所有情况下,最多每分钟生成此事件一次。必须注意的是,尽管可将此信息视为良好的初级指导值,但Windows无法将未计费流量或共享同一数据限制(例如,家庭计划或SIM对换)的其他设备上的使用量也计算在内。运营商应用仅应将本地数据计数器用于自上次与运营商所有的计费系统同步后粗略估计使用量。对于已使用的数据使用量,应将计费系统提供的信息视为权威信息。DataPlanReset在计划重置日期当日,DUSM将用户的当前本地数据使用量重置为零。DataPlanDeleted ProfileConnected和ProfileDisconnected当Windows连接管理器连接到运营商体验元数据提供的网络配置文件时,将生成具有这些MessageTypes的MobileOperatorNotification事件。此事件将在每次连接和断开连接时触发,其中包括睡眠/恢复后的初始连接。\hRegisteredRoaming和RegisteredHome当Windows连接管理器注册到报告为漫游的网络时,将生成具有这些

MessageTypes的MobileOperatorNotification事件。此事件将在每次注册时触发,其中包括睡眠/恢复后的初始注册。应用会仅在用户在漫游网络上注册时和在用户返回其所属网络时通知该用户。由于此事件在每次注册时触发,因此该应用负责在应用的会话数据中跟踪以前注册的状态。通过元数据注册MobileOperatorNotification事件通常情况下,应用必须由用户至少运行一次才可通过系统事件代理注册工作项。但是,由于完成关键移动宽带方案需要使用MobileOperatorNotification事件,因此此事件通过移动宽带服务元数据与移动宽带应用相关联。在服务元数据中,添加以下条目:\Package\SoftwareInformation\SoftwareInfo.xml<DeviceCompanionApplications> <Package> <Applications> <ApplicationId="MyOperatorNotification"/><DeviceNotificationHandlers><DeviceNotificationHandlerEventID="MobileOperatorNotificationHandler"EventAsset="backgroundtask.js"/></DeviceNotificationHandlers></Applications> </Package></DeviceCompanionApplications>如果Metro风格应用为C#应用,则事件资产必须指向实现backgroundtask接口的运行时类。<DeviceNotificationHandlers><DeviceNotificationHandlerEventID="MobileOperatorNotificationHandler"EventAsset="MNOMessageBackground.OperatorNotification"/>下载元数据和应用时,设备设置管理器通过系统事件代理注册相应的工作项之后,应用才可运行一次。在元数据中更改后台任务注册如果在更新版本的Metro风格应用中更改后台任务入口点,也需要更改元数据中的DeviceNotificationHandler。虽然最终用户需要在Windows应用商店中手动更新Metro风格应用,但是

会在Windows8电脑上自动更新元数据。开发人员应避免在元数据中更改

DeviceNotificationHandler后台任务注册。如果需要进行更改,则元数据应包含对所有受支持版本的Metro风格应用中使用的所有不同后台任务入口点的引用,以便为尚未手动更新Metro风格应用的最终用户保留功能。在设置XML中定义筛选规则Windows使用来自运营商的元数据信息来自定义Windows8的各个方面,其中包括提供数据以设置电脑。设置XML用于指定自定义筛选规则以区分运营商SMS与USSD通知。有关讨论的元数据和设置的详细信息,请参阅\h提供移动宽带元数据。Windows接受来自运营商的基于XML的设置文件。设置XML的示例版本如下所示:<?xmlversion="1.0"encoding="utf-8"?><CarrierProvisioningxmlns="/networking/CarrierControl/v1"><Global><!--AdjusttheCarrierIDtofitmatchtheServiceNumberinservicemetadata.RefertotheMSDNdocumentationaboutCarrierId.--><CarrierId>{11111111-1111-1111-1111-111111111111}</CarrierId><!--AdjusttheSusbscriberID.RefertotheMSDNdocumentationaboutSubscriberID's.--><SubscriberId>1234567890</SubscriberId></Global><MBNProfiles><DefaultProfilexmlns="/networking/CarrierControl/WWAN/v1"><!--Adjusttheprofilename--><Name>Contoso</Name><AssociatedPlan>Limited</AssociatedPlan><!--AdjustthehomeprovidernameforthegivenSIM/Device--><HomeProviderName>Contoso</HomeProviderName><Context><!--AdjusttheaccessstringtoyourAPN.--><AccessString>Contoso.Contoso</AccessString><!--AdjusttheUserLogonCredtofityourUserLogonCred.RefertotheMSDNdocumentationaboutUserLogonCred's.--><UserLogonCred><UserName>user</UserName><Password>password</Password></UserLogonCred></Context></DefaultProfile><Messagesxmlns="/networking/CarrierControl/WWAN/v1"><MessageRuleId="Sample1"Silent="true"><SMSBearerClassZeroOnly="false"Sender=/><!--[^]*matchesallmessagesfromthissender,regardlessofcontent--><Pattern>[^]*</Pattern><!--BecausenoFieldsarespecified,thismessagewillbepassedtotheoperatorappwithoutparsing.--></Message><MessageRuleId="Sample2"Silent="false"><!--Parsingasimpleusagemessage.--><USSDBearer/><Pattern>(\d+\.\d+)(\w+)of(\d+)(\w+)usedasof(\S+)</Pattern><!--Usingthesefielddefinitions,Windowswillautomaticallyupdateusagedatabeforepassingthemessagetotheoperatorapp.--><UnitsG="GB"M="MB"/><Fields><!--Thesefieldsarecurrentlyunordered,butanorderwillberequiredinRC.--><UsageGroup="1"UnitGroup="2"/><UsageTimestampGroup="5"Format="%I:%M%pon%d%b"/><DataLimitGroup="3"UnitGroup="4"/></Fields></Message></Messages></MBNProfiles><Provisioning/></CarrierProvisioning>将文本消息标识为运营商消息的规则可在此XML中定义。允许的发件人:“Sender”特性用于指定允许通知从其发出的保留发件人地址。(此数字必须与SMS消息中接收到的发件人编号精确匹配,其中包括国际格式)。模式:用于标识和可选地从文字消息中提取数据字段的正则表达式。要匹配来自某个发件人的所有消息,请使用模式[^]*更多信息可在\h提供移动宽带元数据中找到。开发处理MobileOperatorNotification事件的应用最佳做法关于后台事件的处理,应遵守以下最佳做法:请勿注册你无法对其采取操作的后台事件。处理这些事件将不必要地占用应用程序配额。请勿在接收到后台事件时执行大量处理。请考虑将处理推迟到下次应用启动时。请考虑显示toast通知和更新磁贴以响应后台事件。可以启动Metro风格应用来处理后台事件负载。有关Windows8中后台事件模型的详细信息,请参阅\h后台任务简介。第1步:后台任务合约声明若要使Windows可以识别移动运营商的Metro风格设备应用提供的后台任务体验,该应用必须声明它提供了系统功能的扩展。若要在VisualStudio11项目的package.appxmanifest文件中做出声明,请遵循以下步骤:在MicrosoftVisualStudio2021中,在解决方案资源管理器中双击你的项目的package.appxmanifest文件。在“声明”选项卡中,从“可用声明”中选择“后台任务”,然后单击“添加”。在“属性”下输入应用信息。对于使用JavaScript和HTML的Metro风格设备应用,在应用程序设置的StartPage字段中输入在应用中处理后台任务的文件名(例如backgroundtask.js)。对于“支持的任务类型”,请选择“系统事件”。下图显示了采用C#的此过程:下图显示了采用JavaScript的此过程:假如操作正确,当使用Notepad打开package.appxmanifest时,会看到以下代码:<Applications><ApplicationId=…>......<ExtensionCategory="windows.backgroundTasks"StartPage="backgroundtask.js"><BackgroundTasks><TaskType="systemEvent"/></BackgroundTasks></Extension>......</Application></Applications>第2步:后台任务处理程序如果应用提供移动运营商通知声明,则必须提供用于该后台任务激活的处理程序。该处理程序将从以下位置中获取移动运营商网络帐户ID和事件数据:

(Windows.Networking.NetworkOperators.NetworkOperator

NotificationEventDetails)。由于后台任务支持的唯一UI为Toast,因此后台任务处理程序可以显示Toast或将NetworkOperatorNotificationEventDetails保存到本地存储中。以下代码示例显示了可在接收到新的管理SMS通知时运行的后台任务。C#:usingWindows.Networking.NetworkOperators;namespaceMNOMessageBackground{publicsealedclassMNOBackgroundTask:IBackgroundTask{publicvoidRun(Windows.ApplicationModel.Background.IBackgroundTaskInstancetaskInstance){ NetworkOperatorNotificationEventDetailsnotifyData=(NetworkOperatorNotificationEventDetails)taskInstance.TriggerDetails;//ThenetworkaccountIDisstoredinnotifyData.NetworkAccountId.switch(notifyData.NotificationType){caseNetworkOperatorEventMessageType.Gsm://0break;caseNetworkOperatorEventMessageType.Cdma://1break;caseNetworkOperatorEventMessageType.Ussd://2break;caseNetworkOperatorEventMessageType.DataPlanThresholdReached://3break;caseNetworkOperatorEventMessageType.DataPlanReset://4break;caseNetworkOperatorEventMessageType.DataPlanDeleted://5break;caseNetworkOperatorEventMessageType.ProfileConnected://6break;caseNetworkOperatorEventMessageType.ProfileDisconnected://7break;caseNetworkOperatorEventMessageType.RegisteredRoaming://8break;caseNetworkOperatorEventMessageType.RegisteredHome:///9break;default:break;} //Addcodetosavethemessagetoapplocalstorage,andoptionallyshowtoastnotificationandtileupdates.}}}JavaScript:(function(){"usestrict";////Thebackgroundtaskinstance'sactivationparametersareavailablevia//Windows.UI.WebUI.WebUIBackgroundTaskInstance.current.//varbackgroundTaskInstance=Windows.UI.WebUI.WebUIBackgroundTaskInstance.current,networkOperatorEventType=Windows.Networking.NetworkOperators.NetworkOperatorEventMessageType,key=null,settings=Windows.Storage.ApplicationData.current.localSettings;try{vardetails=backgroundTaskInstance.triggerDetails;//ThenetworkaccountIDisstoredinworkAccountId.switch(details.notificationType){casenetworkOperatorEventType.gsm:showToast("MobileBroadbandmessage",details.message);break;casenetworkOperatorEventType.cdma:showToast("MobileBroadbandmessage",details.message);break;casenetworkOperatorEventType.ussd:showToast("MobileBroadbandmessage",details.message);break;casenetworkOperatorEventType.dataPlanThresholdReached:showToast("MobileBroadbandmessage","Dataplanthresholdreached");break;casenetworkOperatorEventType.dataPlanReset:showToast("MobileBroadbandmessage","Dataplanreset");break;casenetworkOperatorEventType.dataPlanDeleted:showToast("MobileBroadbandmessage","Dataplandeleted");break;casenetworkOperatorEventTfileConnected:showToast("MobileBroadbandmessage","Profileconnected");break;casenetworkOperatorEventTfileDisconnected:showToast("MobileBroadbandmessage","Profiledisconnected");break;casenetworkOperatorEventType.registeredRoaming:showToast("MobileBroadbandmessage","Registeredroaming");break;casenetworkOperatorEventType.registeredHome:showToast("MobileBroadbandmessage","Registeredhome");break;default:showToast("MobileBroadbandmessage","Unknownmessage");break;}////AJavaScriptbackgroundtaskmustcallclosewhenitisdone.//close();}catch(exception){//Displayerrormessage.close();}显示toast通知有关toast通知和磁贴更新体验设计指南,请参阅\h移动运营商应用的用户体验设计。为了显示toast通知,应用需要在.appxmanifest的“通知”部分中指定

“ToastCapable”。以下代码表明已在package.appxmanifest文件中设置了“ToastCapable”(如果使用记事本查看该文件的话)。<Applications><ApplicationId=…><VisualElementsToastCapable="true"…......</Application></Applications>以下代码展示如何使用JavaScript在后台任务处理程序中显示toast通知。JavaScript:functionshowToast(title,body){varnotifications=Windows.UI.Notifications;vartoastXml=vartemp="theparameterwillpasstoappwhenappactivatedfromtapToast";toastXml.selectSingleNode("/toast").setAttribute("launch",temp);vartextNodes=toastXml.getElementsByTagName("text");textNodes[0].appendChild(toastXml.createTextNode(title));textNodes[1].appendChild(toastXml.createTextNode(body));vartoast=newnotifications.ToastNotification(toastXml);toastNotificationManager.createToastNotifier().show(toast);}获取短信JavaScript:(function(){"usestrict";////Thebackgroundtaskinstance'sactivationparametersareavailablevia//Windows.UI.WebUI.WebUIBackgroundTaskInstance.current.//varbackgroundTaskInstance=Windows.UI.WebUI.WebUIBackgroundTaskInstance.current,try{vardetails=backgroundTaskInstance.triggerDetails;if(details.notificationType===networkOperatorEventType.gsm||details.notificationType===networkOperatorEventType.cdma){ vartextMessage=newWindows.Devices.Sms.SmsTextMessage.fromBinaryMessage(details.smsMessage);//textMessagecanbeusedtogetotherSmsMessageproperties//likesendernumber,timestamp,messagepartcountetc.showToast("From:"+textMessage.from+";TimeStamp:"+textMessage.timestamp,details.message);}使用本地存储后台任务可以使用本地存储来保存从后台事件中获取的消息,以便应用可以在稍后使用该信息。以下代码展示了如何使用本地存储来存储消息。////Savethemessage//varsettings=Windows.Storage.ApplicationData.current.localSettings;varkeyMessage="BA5857FA-DE2C-4A4A-BEF2-49D8B4130A39";////Thebackgroundtaskinstance'sactivationparametersareavailablevia//Windows.UI.WebUI.WebUIBackgroundTaskInstance.current//varbackgroundTaskInstance=Windows.UI.WebUI.WebUIBackgroundTaskInstance.current;vardetails=backgroundTaskInstance.triggerDetails;settings.values[keyMessage]=details.message;以下代码展示了如何在应用中检索后台任务处理程序存储的消息。varsettings=Windows.Storage.ApplicationData.current.localSettings;varkeyMessage="BA5857FA-DE2C-4A4A-BEF2-49D8B4130A39";varoperatorMessage=settings.values[keyMessage];第3步:处理激活事件如果后台任务处理程序显示Toast,则可以通过点击Toast来启动应用。如果

toast设置了参数,则将通过detail.arguments将其传递给应用。以下代码展示了如何使用JavaScript附加事件处理程序和确定应用上下文。WinJS.Application.addEventListener("activated",activated;false);functionactivated(eventArgs){if(eventArgs.detail.kind===Windows.ApplicationModel.Activation.ActivationKind.launch){if(!eventArgs.detail.arguments){//InitializelogicfortheStartexperiencehere.}else{//InitializelogicfortheNotificationexperiencehere.}}}有关详细信息,请参阅\h后台任务简介。第4步:处理后台任务完成处理程序在后台任务完成时,前台应用也可以注册要通知的完成处理程序。在后台任务的“运行”方法中发生的完成状态或任何例外将传递到前台应用中的完成处理程序中。如果应用在任务完成时已挂起,则下次应用恢复时将接收到完成通知。如果应用已处于“已终止”状态,则不会接收到完成通知。如果后台任务需要保留其运行成功的信息,则它必须使用状态管理器或其他方法保留该信息,例如当应用恢复“正在运行”状态时可以读取的文件。尽管移动运营商后台事件可由系统为应用自动注册,但如果应用希望注册到后台完成或进度处理程序,则该应用仍需要至少运行一次。以下代码展示了如何将事件处理程序附加到后台事件中。有关后台任务进度报告和完成处理程序的详细信息,请参阅后台任务简介。注意:在Windows8ConsumerPreview中,事件名称可能为空。作为一种解决方法,将任务名称与“”进行比较。C#:foreach(varcurinBackgroundTaskRegistration.AllTasks){if(cur.Value.Name==“MobileOperatorNotificationHandler”){cur.Value.Progress+=newBackgroundTaskProgressEventHandler(OnProgress);cur.Value.Completed+=newBackgroundTaskCompletedEventHandler(OnCompleted);}}////Handlebackgroundtaskcompletion.//privatevoidOnCompleted(IBackgroundTaskRegistrationsender,BackgroundTaskCompletedEventArgse){vartaskCompletion=taskasIBackgroundTaskRegistration;varcompletionArgs=args.ContextasBackgroundTaskCompletedEventArgs;////Ifthebackgroundtaskthrewanexception,displaytheexceptionin//theerrortextbox.//if(completionArgs.Status!=null){throwcompletionArgs.Status;}}////Handlebackgroundtaskprogress.//privatevoidOnProgress(IBackgroundTaskRegistrationsender,BackgroundTaskProgressEventArgse){vartaskRegistration=taskasIBackgroundTaskRegistration;varprogressArgs=args.ContextasBackgroundTaskProgressEventArgs;//progressArgs.Progresshastheprogresspercentage}JavaScript:variter=Windows.ApplicationModel.Background.BackgroundTaskRegistration.allTasks.first();varhascur=iter.hasCurrent;while(hascur){varcur=iter.current.value;if(===“MobileOperatorNotificationHandler”){cur.addEventListener("progress",newProgressHandler(cur).onProgress);cur.addEventListener("completed",newCompleteHandler(cur).onCompleted);}hascur=iter.moveNext();}////Handlebackgroundtaskprogress.//functionProgressHandler(task){this.onProgress=function(args){try{varprogress="Progress:"+gress+"%";}catch(ex){displayError(ex);}};}////Handlebackgroundtaskcompletion.//functionCompleteHandler(task){this.onCompleted=function(args){try{varkey=task.taskId;}catch(ex){displayError(ex);}};}疑难解答触发元数据分析以注册后台任务开发人员可通过在桌面的“设备和打印机”窗口中按F5键(或右键单击并选择“刷新”),手动触发Windows8以分析服务元数据并注册后台任务。仅当部署应用时,通过服务元数据分析进行后台任务注册才会成功。验证是否已正确注册后台任务开发人员可通过查看ApplicationandServicesLogs\Microsoft\Windows\

DeviceSetupManager下的事件日志,验证设备设置管理器(DSM)是否已正确分析服务元数据。打开“事件查看器”。在“开始”页上,键入“事件查看器”并在“搜索”窗格中选择设置。单击“查看事件日志”。在菜单选项卡上,选择“查看”,然后选择“显示分析和调试日志”。浏览到ApplicationsandServicesLogs\Microsoft\Windows\

DeviceSetupManager。\h验证是否已成功应用设置元数据设置文件中的CarrierId和体验元数据中的服务编号之间不匹配验证系统事件代理是否正在执行后台任务开发人员可通过检查事件查看器,验证Windows是否正在生成

MobileOperatorNotification事件并且事件代理正在执行应用的后台任务。

默认情况下,对这些事件的记录处于禁用状态,可通过以下步骤启用:打开“事件查看器”。在“开始”页上,键入“事件查看器”并在“搜索”窗格中选择设置。单击“查看事件日志”。浏览到ApplicationsandServicesLogs\Microsoft\Windows\

BackgroundTaskInfrastructure。右键单击“诊断”日志并选择“启用日志”。如果未正在执行后台任务,请首先验证在服务元数据中指定的你的后台任务的名称是否与你的程序包的AppXManifest.xml文件中的名称相匹配。然后,

在部署应用并插入移动宽带设备后,验证是否已触发对服务元数据的分析。验证Windows是否正在接收SMS和USSD开发人员可通过在事件查看器中检查SmsRouter事件来验证Windows是否正在接收SMS和USSD通知。未将收到的短信检测为运营商通知如果未将收到的SMS检测为运营商通知,请在帐户设置元数据中验证SMS管理通知的自定义筛选规则。有关详细信息,请参阅\h提供移动宽带元数据。尤其是,如果指定发件人号码,请验证指定的号码格式匹配通过SMSAPI收到的消息中的格式。若要验证这已正确匹配,请将模式临时更改为“[^]*”,以匹配来自此发件人的所有消息。附录backgroundtask.js示例文件:////AJavaScriptbackgroundtaskrunsaspecifiedJavaScriptfile.//(function(){"usestrict";////Thebackgroundtaskinstance'sactivationparametersareavailableviaWindows.UI.WebUI.WebUIBackgroundTaskInstance.current.//varbackgroundTaskInstance=Windows.UI.WebUI.WebUIBackgroundTaskInstance.current,networkOperatorEventType=Windows.Networking.NetworkOperators.NetworkOperatorEventMessageType,key=null,settings=Windows.Storage.ApplicationData.current.localSettings;try{vardetails=backgroundTaskInstance.triggerDetails;switch(details.notificationType){casenetworkOperatorEventType.gsm:vartextMessage=newWindows.Devices.Sms.SmsTextMessage.fromBinaryMessage(details.smsMessage);showToast("GsmMsgFrom:"+textMessage.from+";TimeStamp:"+textMessage.timestamp,details.message);break;casenetworkOperatorEventType.cdma:showToast("MobileBroadbandmessage",details.message);break;casenetworkOperatorEventType.ussd:showToast("MobileBroadbandmessage",details.message);break;casenetworkOperatorEventType.dataPlanThresholdReached:showToast("MobileBroadbandmessage","Dataplanthresholdreached");break;casenetworkOperatorEventType.dataPlanReset:showToast("MobileBroadbandmessage","Dataplanreset");break;casenetworkOperatorEventType.dataPlanDeleted:showToast("MobileBroadbandmessage","Dataplandeleted");break;casenetworkOperatorEventTfileConnected:showToast("MobileBroadbandmessage","Profileconnected");break;casenetworkOperatorEventTfileDisconnected:showToast("MobileBroadbandmessage","Profiledisconnected");break;casenetworkOperatorEventType.registeredRoaming:showToast("MobileBroadbandmessage","Registeredroaming");break;casenetworkOperatorEventType.registeredHome:showToast("MobileBroadbandmessage","Registeredhome");break;default:showToast("MobileBroadbandmessage","Unknownmessage");break;}taskSucceeded();}catch(exception){taskFailed();}functionshowToast(title,body){varnotifications=Windows.UI.Notifications;vartoastNotificationManager=Windows.UI.Notifications.ToastNotificationManager;vartoastXml=toastNotificationManager.getTemplateContent(notifications.ToastTemplateType.toastText02);////PasstoappthrougheventArguments.arguments.//vartemp="\"Title\""+":"+"\""+title+"\""+","+"\"Message\""+":"+"\""+body+"\"";if(temp.length>251){temp=temp.substring(0,251);}toastXml.selectSingleNode("/toast").setAttribute("launch","'{"+temp+"}'");vartextNodes=toastXml.getElementsByTagName("text");textNodes[0].appendChild(toastXml.createTextNode(title));textNodes[1].appendChild(toastXml.createTextNode(body));vartoast=newnotifications.ToastNotification(toastXml);toastNotificationManager.createToastNotifier().show(toast);}////Thisfunctioniscalledwhenthebackgroundtaskiscompletedsuccessfully.//functiontaskSucceeded(){////Usethesucceededpropertytoindicatethatthisbackgroundtaskcompletedsuccessfully.//backgroundTaskInstance.succeeded=true;backgroundTask.task

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论