如何赶上Longpress并在KEYCODE_VOLUME_UP上调用标准操作? [英] How to catch Longpress and call the standard action on KEYCODE_VOLUME_UP?

查看:172
本文介绍了如何赶上Longpress并在KEYCODE_VOLUME_UP上调用标准操作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望用户能够长按volumeUp硬件按钮以跳过一首歌曲,并在短按时执行常规的volumeUp操作.

I want the users to be able to longpress the volumeUp hardware button for skipping a song, and do the regular volumeUp action on a short press.

我能够区分两者(我找到了此解决方案,并使用了onKeyDown,onKeyLongPress和onKeyUp之间的标志),但我想知道在按下提高音量按钮后是否还能调用标准/超级动作. 我似乎无法弄清楚何时调用了volumeUp动作(在onKeyDown-或onKeyUp-event中)以及在何处调用它.

I'm able to differentiate between both (I found this solution, working with flags between onKeyDown, onKeyLongPress and onKeyUp) but I'm wondering if I can still call the standard/super action when the volume up button has been pressed. I can't seem to figure out when the volumeUp action is being called (in the onKeyDown- or onKeyUp-event) and where to call it.

还是我应该编写自己的函数来更改音量?

Or should I just write my own function to change the volume?

谢谢.

我的代码:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
        event.startTracking();
        if (bLong) {
            bShort = false;
            return true;
        } else {

            bShort = true;
            bLong = false;

            return true;
        }
    }

    return super.onKeyDown(keyCode, event);
}

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
        if (bShort) {
            bShort = false;
            bLong = false;
            if (mp != null) {
                //HERE IS WHERE I WANT TO CALL THE VOLUME-UP ACTION
            }
            return true;
        }
    }
    return super.onKeyUp(keyCode, event);
}

@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
        if (bRunning && mp != null) {
            playNextSong();
        }
        bShort = false;
        bLong = false;
        return true;
    }
    return super.onKeyLongPress(keyCode, event);
}

推荐答案

看看也许会对您有所帮助.

Take a look maybe this gonna help you.

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 && event.isLongPress()) {
            //(skipping a song)
            }
            if (action == KeyEvent.ACTION_UP) {           
            //(vol up)
            }
            return true;
    case KeyEvent.KEYCODE_VOLUME_DOWN:
        if (action == KeyEvent.ACTION_UP)

        return true;
    default:
        return super.dispatchKeyEvent(event);
    }
}

这篇关于如何赶上Longpress并在KEYCODE_VOLUME_UP上调用标准操作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆