Android – 我的应用程序中使用的音量button

我需要使用音量button来控制我的应用程序中的可变参数。 当按下button时,我使用Activity.onKeyDown来得到通知,但媒体音量也增加。
当我按下音量键时,Android正在做如下的操作:

  1. 增加媒体/铃声音量
  2. 将事件传递给我的应用程序

有没有办法避免增加系统音量和使用音量键只为我的应用程序?

您需要捕捉所有操作:

 @Override public boolean dispatchKeyEvent(KeyEvent event) { int action = event.getAction(); int keyCode = event.getKeyCode(); switch (keyCode) { case KeyEvent.KEYCODE_VOLUME_UP: if (action == KeyEvent.ACTION_DOWN) { //TODO } return true; case KeyEvent.KEYCODE_VOLUME_DOWN: if (action == KeyEvent.ACTION_DOWN) { //TODO } return true; default: return super.dispatchKeyEvent(event); } } 

接下来会更好,因为长时间点击KeyEvent.KEYCODE_VOLUME_UP在以前的答案中不起作用。

 @Override public boolean dispatchKeyEvent(KeyEvent event) { int action = event.getAction(); int keyCode = event.getKeyCode(); switch (keyCode) { case KeyEvent.KEYCODE_VOLUME_UP: if (action == KeyEvent.ACTION_DOWN) { //TODO } return true; case KeyEvent.KEYCODE_VOLUME_DOWN: if (action == KeyEvent.ACTION_DOWN) { //TODO } return true; default: return super.dispatchKeyEvent(event); } } 

只是为了完成以前的答案,如果你想要长时间的支持,你应该检查一下键被closures的时间:

 event.getEventTime() - event.getDownTime() > ViewConfiguration.getLongPressTimeout() 

最后代码将如下所示:

  @Override public boolean dispatchKeyEvent(KeyEvent event) { int action = event.getAction(); int keyCode = event.getKeyCode(); switch (keyCode) { case KeyEvent.KEYCODE_VOLUME_UP: if (action == KeyEvent.ACTION_UP) { if (event.getEventTime() - event.getDownTime() > ViewConfiguration.getLongPressTimeout()) { //TODO long click action } else { //TODO click action } } return true; case KeyEvent.KEYCODE_VOLUME_DOWN: if (action == KeyEvent.ACTION_UP) { if (event.getEventTime() - event.getDownTime() > ViewConfiguration.getLongPressTimeout()) { //TODO long click action } else { //TODO click action } } return true; default: return super.dispatchKeyEvent(event); } } 

分片中的音量button用法

如果您希望在绑定活动的片段中实现这一点,则可以使用:

注意:fragment_words只是一个使用的布局名称

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_words, container, false); rootView.requestFocus(); rootView.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if( keyCode == KeyEvent.KEYCOD_VOLUME_DOWN ) { //TODO SOMETHING return true; } else { return false; } } });} 

我已经使用这个代码来听音量button。

  @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)){ //Do something } return true; }