安卓 如何侦听音量按钮事件?

2022-08-31 22:28:49

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

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.");
}

}

答案 1

我不知道您是否可以获得硬件键的长按事件。

我之前使用此代码来侦听音量按钮。

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

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

科特林

override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
    if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { 
        // Do something
    }
    return true
}

答案 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);
        }
    }

推荐