Android如何收听音量按钮事件?

t3h*_*man 37 java android

我知道你们可能已经厌倦了这些帖子,但为什么当我按下音量时没有任何事情发生?我只是想制作一个简单的代码,但显然它不起作用.

package com.cakemansapps.lightwriter;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.FrameLayout;
import android.view.KeyEvent;
import android.util.Log;

public class LightWriter extends Activity implements OnTouchListener {
private static final String TAG = "Touch" ;
@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  FrameLayout main = (FrameLayout) findViewById(R.id.main_view);
}

@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) 
{
    Log.w("LightWriter", "I WORK BRO.");
    return true;
}
return super.onKeyLongPress(keyCode, event);
}

public boolean onTouch(View view, MotionEvent me) {
    throw new UnsupportedOperationException("Not supported yet.");
}

}
Run Code Online (Sandbox Code Playgroud)

Foa*_*Guy 53

我不知道你是否可以获得硬件密钥的长按事件.

我之前使用过此代码来监听音量按钮.

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

如果这对您不起作用,请告诉我们您正在测试的设备.

  • 最后一行应该是"return super.onKeyDown(keyCode,event);" 而不是"返回真实". (18认同)
  • 此代码是正确的,但它将禁用减少音量的主要目的.它将优先考虑`//做某事部分'中的陈述 (3认同)
  • 真棒.我如何知道它降低了哪个音量?...例如,如果是系统,音乐或闹钟? (3认同)
  • @ajdeguzman 如果你返回 false,而不是 true,我认为它也会相应地改变音量。 (2认同)

Xar*_*mer 13

另一种方法

@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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • 你可以告诉设备锁定时它是如何工作的吗? (2认同)

Ham*_*egh 8

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)) {
        // ... your code
        return true;
    } else if ((keyCode == KeyEvent.KEYCODE_VOLUME_UP)) {
        // ... your code
        return true;
    } else
        return super.onKeyDown(keyCode, event);
}
Run Code Online (Sandbox Code Playgroud)


Ser*_*ner 5

试试这些。刚刚测试了它们:

@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
    super.onKeyLongPress(keyCode, event);
    if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
        Log.w("LightWriter", "I WORK BRO.");
        return true;
    }
    return false;
}

public boolean onKeyDown(int keyCode, KeyEvent event) {
    super.onKeyDown(keyCode, event);
    if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
        Log.w("LightWriter", "I WORK BRO.");
        return true;
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)