Windows Phone:如何管理抖动事件?

Posted

技术标签:

【中文标题】Windows Phone:如何管理抖动事件?【英文标题】:Windows Phone: how to manage shake events? 【发布时间】:2015-06-17 10:14:54 【问题描述】:

加速度计已激活(如果我设置 ReadingChanged 它可以工作)。 为什么不处理抖动事件?

namespace AppExample

 public sealed partial class MainPage : Page
 
    private Accelerometer accel;

    public MainPage()
    
        this.InitializeComponent();
        this.NavigationCacheMode = NavigationCacheMode.Required;

        accel = Accelerometer.GetDefault();
        //accel.ReadingChanged += accel_ReadingChanged;
        accel.Shaken += accel_Shaken;
    

    void accel_Shaken(Accelerometer sender, AccelerometerShakenEventArgs args)
    
        Debug.WriteLine("shaken");
    
 

【问题讨论】:

【参考方案1】:

如果您介意,有一个名为 ShakeGestures 的帮助程序库来处理 windows phone 8 的摇动手势。请查看question

【讨论】:

【参考方案2】:

如果您运行的是 Windows Phone 8,Shaken 事件不会触发,也不会根据MSDN page 引发任何错误。

否则这对我来说似乎是一个奇怪的错误,我找不到任何有关它的信息。

【讨论】:

设备显示 Windows Phone 8.1 更新【参考方案3】:

您可以调用 Dispatcher 以便在主线程上显示结果。

namespace AppExample

    public sealed partial class MainPage : Page
    
        Accelerometer accel;

        public MainPage()
        
            this.InitializeComponent();

            accel = Accelerometer.GetDefault();
            accel.ReadingChanged += accel_ReadingChanged;
            accel.Shaken += accel_Shaken;
        

        await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
        
            LabelTest.Text = "Shaken!! " +  args.Reading.AccelerationX.ToString();
        );

        async private void accel_Shaken(object sender, AccelerometerShakenEventArgs e)
        
            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            
                _shakeCount++;
                ScenarioOutputText.Text = _shakeCount.ToString();
            );
        
    

【讨论】:

你把“等待”部分放在哪里?但是我认为您打算使用 readingChanged 事件,但我想要框架提供的 Shaken 事件 如果我想进行 UI 更新,我会使用调度程序,但我使用的是 Debug 类向 Visual Studio 发送消息 问题是处理程序永远不会被调用

以上是关于Windows Phone:如何管理抖动事件?的主要内容,如果未能解决你的问题,请参考以下文章

windows phone 8 长列表选择器。如何在长列表选择器中添加新项目。目前我正在使用 ItemRealized 事件

Windows Phone 应用程序仅适用于 Windows Phone 7?

windows phone listbox的点击事件

Windows Phone 8 用户控件的 VisibleChanged 事件在哪里?

如何从列表框绑定 Windows Phone 7 中选择一个项目

从 Windows Phone 7 中的 GeoCoordinateWatcher.StatusChanged 事件返回位置数据