WP7 - Runing App under the Locked Screen详述(2)
?设定PhoneApplicationService.Current.ApplicationIdleDetectionMode与注册Obscured、Unobscured事件的处理。 1: if ( runsUnderLock ) 2: { 3: //设定目前App的IdleDetectionMode=Disabled,让WP7 OS不会将程序转成tombstone 4: PhoneApplicationService.Current.ApplicationIdleDetectionMode = IdleDetectionMode.Disabled; 5:? 6: //取得RootVisual,用来注册Obscured与Uobscured事件处理,客制App在Locked与Unlocked下要完成的任务 7: PhoneApplicationFrame rootframe = App.Current.RootVisual as PhoneApplicationFrame ; 8:? 9: System.Diagnostics.Debug.Assert(rootframe != null,"This sample assumes RootVisual has been set"); 10: if (rootframe != null) 11: { 12: rootframe.Obscured += new EventHandler 13: rootframe.Unobscured += new EventHandler(rootframe_Unobscured); 14: } 15: 16: } 17: else 18: { 19: IsRestartRequired = true; 20: // we can not set it; we have to restart app ... 21: // PhoneApplicationService.Current.ApplicationIdleDetectionMode = IdleDetectionMode.Enabled ; 22: // 此段说明由于IdleDetectionMode不能在App执行时改变,因此,会另外启动一个EventHandler要求重启程序。 23: EventHandler eh = RestartRequired; 24: if (eh != null) 25: eh(this,new EventArgs()); 26: } 上述程序是撷取出
用途在于: (1) 随着RunsUnderLock属性值的设定,识别runsUnderLock变量是否App要设定为IdleDetectionMode.Disabled; ???? 如果是则设定;否则则通知要重新启动程序; (2) 设定完毕之后,将设定值会被保存于IsolatedStorage中。 (3) 在下次在App启动时,将保存于IsolatedStorage中的Setting取出,进行识别再重新设定RunsUnderLock属性。 ? 最后,更详细的范例内容,可以参考
其范例透过Pivot来呈现二个不同的执行方式: ?在”greedy pivot”下 说明PhoneApplicationService.Current.ApplicationIdleDetectionMode设定Enabled与Disabled后,App在Locked下可以正常播放音乐; ? ?在”mellow pivot”下 透过Obscured与Unobscured事件实践,说明即使支持”Run? under lock”,在进入Locked后,音乐还是被关闭了,但等你Unlocked时, 音乐又自动播放了。强调如何实践在Locked下把App的功能暂时停止(不是进行tombstone"),目的在节省电池与性能的消耗。 ? ? [补充] 往下我补充在阅读程序时,遇到一些缺少的观念,所以在此先补足一些额外在开发上要注意与可以思考的部分: -INotifyPropertyChanged INotifyPropertyChanged属于:System.ComponentModel,这个类常出现在针对客制出来的组件需要实践它背后属性异动时触发通知动作 一定会实践的重要界面。如果你有参考过
性变量的处理。实践该界面有什么好处? ?连动效果:INotifyPropertyChanged最常用于Data Bind时,处理一个控件的数据与影响下一个控件的情形。 ?自动反应:支持该类的对象或类,只要实践该界面后在数据的处理上,都会自动反应在对应的控件属性上。 ? 既然INotifyPropertyChanged有处理Data Bind让数据异动时,App知道如何去更动UI上的内容,那该实践那些东西呢? ?PropertyChangedEventHandler 该Event Handler是INotifyPropertyChanged必要实践的事件处理。它的任务通常用于往上通知某一项指定的属性被Modify了。 当控件接获到通知时,就会进行Bind Data的处理来因应属性调整后的结果。 实践范例可以参考:Bind Better with INotifyPropertyChanged。 ?更详细的INotifyPropertyChanged的内容 我推荐
并且进一步说明INotifyPropertyChanged与DependencyObjects的关联。 ? -PhoneApplicationFrame与PhoneApplicationPage 一个PhoneApplicationFrame内,包括了PhoneApplicationPage控件与其他丰富的其他Microsoft.Phone.Controls下的其他控件, 然而,PhoneApplicationPage控件负责管理目前Frame中Content Area里的所有任务与内容。 透过上图是最好解释整个Frame与Page的关系。 ? References: ?Running a Windows Phone Application under the lock screen ?wpf数据绑定,INotifyPropertyChanged vs DependencyProperty (—) ?INotifyPropertyChanged and WPF ?How to: Implement the INotifyPropertyChanged Interface ?PhoneApplicationPage Control for Windows Phone ?PhoneApplicationFrame Control for Windows Phone ?《Programming WPF》翻译 第4章 2.数据绑定(2) ?Base Controls for Windows Phone (Supported & Unsupported) ?Class Library Reference for Windows Phone ? Dotblogs 的标签:PhoneApplicationService,PhoneApplicationFrame,PhoneApplicationPage
(编辑:ASP站长网) |