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

时间:2015-06-17 10:14:55

标签: event-handling windows-phone accelerometer win-universal-app shake

加速度计被激活(如果我将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");
    }
 }
}

3 个答案:

答案 0 :(得分:2)

如果你介意的话,有一个名为ShakeGestures的助手librairy来处理Windows Phone 8的摇动手势。检查question

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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