2017-09-19 1 views
0

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; 
+0

당신이 지금까지 무슨 짓을? 노력을 보여 주시겠습니까? – timiTao

+0

Barney Chambers가 제안한 MainActivity.cs'OnKeyUp' 메소드를 추가했습니다. 지금 나는 페이지를 바꾸는 방법에 대한 답변을 찾기 위해 구글을 파고있다. –

+0

새 정보로 질문을 업데이트하십시오. 귀하의 코드도 도움이 될 것입니다. – timiTao

답변

0

을하지만, 여기에 볼륨 버튼 누름을 처리하기위한 안드로이드 구현 :

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); 
} 
+0

.android 주요 활동에 코드를 추가했습니다. 그리고 그것의 탐지가 좋은 것. 하지만 지금은 .. 지금 페이지를 어떻게 변경합니까? –

+0

@ GrzegorzG. 볼륨 키 수신기에 대한 의존성 서비스를 사용하고 pcl 인터페이스에서 이벤트/위임자를 사용하고 구독하여 –

+0

페이지를 탐색 할 수 있습니다. 봐도 될까요? –