xamarin.forms - 音量增大和减小键的事件侦听器

时间:2017-09-19 07:10:29

标签: c# events xamarin mvvm xamarin.forms

我正在编写一个xamarin.forms应用程序,我想在按下音量增大和减小按钮时打开“特殊设置”页面。

在xamarin.forms中有没有办法做到这一点?

目前,我已经完成了一个正常运行的事件监听器。现在我需要做的最后一件事是将绑定上下文传递给设置页面。

List<Keycode> _pressedKeys = new List<Keycode>();


        public override bool OnKeyDown(Keycode keyCode, KeyEvent e)
        {
            if(keyCode == Keycode.VolumeDown)
            {
                _pressedKeys.Add(keyCode);
                CheckBoth();
                return true;
            }

            if (keyCode == Keycode.VolumeUp)
            {
                _pressedKeys.Add(keyCode);
                CheckBoth();
                return true;
            }


            return base.OnKeyDown(keyCode, e);
        }

        public override bool OnKeyUp(Keycode keyCode, KeyEvent e)
        {
            if (keyCode == Keycode.VolumeDown)
            {
                _pressedKeys.Remove(keyCode);

                return true;
            }

            if (keyCode == Keycode.VolumeUp)
            {
                _pressedKeys.Remove(keyCode);


                return true;
            }

            return base.OnKeyUp(keyCode, e);
        }

        public void ChangePage()
        {
            ((App)App.Current).ChangeScreen(new SettingsPage());
        }

        public void CheckBoth()
        {
            try
            {
                if (_pressedKeys.Contains(Keycode.VolumeDown) &&
                    _pressedKeys.Contains(Keycode.VolumeUp))
                {
                    Console.WriteLine("It works!");
                    ((App)App.Current).ChangeScreen(new SettingsPage());
                    _pressedKeys.Clear();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }

解决。我添加了以下一行:

var vm= App.Current.MainPage.BindingContext as MainViewModel;

1 个答案:

答案 0 :(得分:0)

我认为您可能必须使用此实现的特定平台,但这是用于处理音量按钮按下的Android实现:

public override bool OnKeyUp(Keycode keyCode, KeyEvent e)
{
    if (keyCode == Keycode.VolumeDown)
    {
        //Dostuff();

        return true;
    }

    if (keyCode == Keycode.VolumeUp)
    {
        //Dostuff();

        return true;
    }
    return base.OnKeyUp(keyCode, e);
}