2011-10-07 8 views
0

솔루션과 비슷한 문제가 몇 번 발생했지만 내 상황에서는 작동하지 않습니다.볼륨 기본 설정 - 볼륨 키 차단

일부 알람에 대해 볼륨 레벨을 선택하는 VolumePreference (DialogPreference 확장)를 만들고 있습니다.

다른 기본 설정에서는 사용자가 알람 중에 재생되는 원하는 벨소리를 선택합니다. 또한 사용자가 VolumePreference에서 볼륨을 선택하는 동안 재생되므로 실제로 소리 나는 방식을 알 수 있습니다.

또 다른 선호도에서 사용자가 놀 때 휴대 전화의 미디어 볼륨 레벨을 "오버라이드"해야하는지 선택합니다. 사용자가 알람 볼륨을 고정시키고 자 할 때 변경 사항의 영향을받지 않아야합니다. 볼륨 키 등이 있습니다. AlarmActivity에서 알람 재생을 시작하기 전에 사용자가 AudioManager에서 최대 레벨로 볼륨을 설정하고 볼륨 키의 모든 keyDown 이벤트를 가로 채고 알람이 끝난 후 볼륨 레벨을 복원합니다.

문제는, onKeyDown 메서드가 없으므로 VolumePreference 내의 볼륨 키를 차단할 수 없습니다.

일부 확인한 후 AudioManager의 registerMediaButtonEventReceiver 메소드가 "상황에 도움이 될 수 있다고 생각하는 MEDIA_BUTTON 인 텐트의 유일한 수신기가되도록 구성 요소를 등록하십시오"라는 AudioManager의 메소드를 발견했으며 볼륨을 잠글 수도 있습니다 보다 보편적으로 (잠금을 시작하고 잠금 해제 후 등록을 취소 할 때 등록) API7에 대한 앱을 만들고있는 동안 API8에서 작업하고 있습니다. - 읽은 내용에서 시장의 10 % 이상을 차지하고 있으므로 계속 사용하고 싶습니다. 그것에.

PreferenceDialog의 볼륨 변경을 차단하는 방법에 대한 아이디어가 있으십니까?

답변

0

몇 가지 생각 해답이 정말로 간단한 것으로 입증되면 DialogPreference의 onCreateDialogView에서 만든 View의 onKeyDown 메서드를 무시하거나 해당 View의 onKeyListener를 설정할 수 있습니다.

첫 번째 예 :

LinearLayout layout = new LinearLayout(mContext) 
    { 
     @Override 
     public boolean onKeyDown(int keyCode, KeyEvent event) { 
      if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN 
        || keyCode == KeyEvent.KEYCODE_VOLUME_UP) return true; 
      return super.onKeyDown(keyCode, event); 
     } 

     @Override 
     public boolean onKeyUp(int keyCode, KeyEvent event) { 
      if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN 
        || keyCode == KeyEvent.KEYCODE_VOLUME_UP) return true; 
      return super.onKeyUp(keyCode, event); 
     } 
    }; 

번째 예 (mDialogView 첫번째 예에서 레이아웃에 대한 참조를 저장한다) : 그것은 두 유연 생각으로

mDialogView.setOnKeyListener(new View.OnKeyListener() { 

      @Override 
      public boolean onKey(View v, int keyCode, KeyEvent event) { 
       if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN 
         || keyCode == KeyEvent.KEYCODE_VOLUME_UP) 
        return true; 
       return false; 
      } 
     }); 

는 I는 두 번째 용액을 선택한 이유가 최소한

  • 나는 볼륨 키 차단을 중지하기 위해 수신기를 제거 할 수 있지만, 첫 번째 방법에서는 할 수 없다
  • 첫 번째 솔루션에서보기를 만들 때 입력을 차단할지 결정해야합니다. VolumePreference가 다른 키를 확장하는 경우별로 사용하지 않습니다.