簡體   English   中英

xamarin.forms-音量調高和調低鍵的事件偵聽器

[英]xamarin.forms - event listener for volume up and down keys

我正在編寫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;

我認為您可能必須針對該實現使用特定於平台的內容,但這是用於處理音量按鈕按下的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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM