【问题标题】:How to detect headset button long click with broadcast listener?如何用广播监听器检测耳机按钮长按?
【发布时间】:2013-12-25 13:57:15
【问题描述】:

我使用广播接收器来检测耳机按钮操作。我在onReceive 函数中使用此代码进行长按:

@Override
public void onReceive(Context context, Intent intent) {
    String intentAction = intent.getAction();
    if (!Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) {
        return;
    }
    KeyEvent event = (KeyEvent) intent
            .getParcelableExtra(Intent.EXTRA_KEY_EVENT);
    if (event == null) {
        return;
    }
    int action = event.getAction();

    switch (event.getKeyCode()) {
        case KeyEvent.KEYCODE_HEADSETHOOK:
            if (action == KeyEvent.FLAG_LONG_PRESS)
                Toast.makeText(context, "Long click!", Toast.LENGTH_SHORT).show();
        break;
    }
    abortBroadcast();

}

但它不起作用。问题出在哪里?有没有其他办法?

【问题讨论】:

    标签: android android-broadcast long-click


    【解决方案1】:

    解决办法如下:

     @Override
     public void onReceive(Context context, Intent intent) {
        String intentAction = intent.getAction();
        if (!Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) {
            return;
         }
         KeyEvent event = (KeyEvent) intent
                .getParcelableExtra(Intent.EXTRA_KEY_EVENT);
        if (event == null) {
            return;
        }
        int action = event.getAction();
    
        switch (event.getKeyCode()) {
            case KeyEvent.KEYCODE_HEADSETHOOK:
                if (action == KeyEvent.ACTION_UP)
                    if (SystemClock.uptimeMillis() - event.getDownTime() > 2000) 
                         Toast.makeText(context, "Long click!", Toast.LENGTH_SHORT).show();
            break;
        }
        abortBroadcast();
    
    }
    

    【讨论】:

    • @UpendraShah 确保你的广播监听器被调用。在某些情况下,其他应用会阻止您应用的侦听器获取事件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 2012-07-25
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多