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

Windows Phone: how to manage shake events?

加速度计已激活(如果我设置了 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");
    }
 }
}

如果你是 运行 Windows Phone 8 ,根据 MSDN page.[=11=,Shaken 事件将不会触发并且不会引发任何错误]

否则我觉得这是个奇怪的错误,我找不到任何相关信息。

您可以调用 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();
            });
        }
    }
}

如果您介意,可以使用名为 Shake Gestures 的帮助程序库来处理 windows phone 的摇动手势 8. 检查此 question