Как обнаружить долгое нажатие кнопки гарнитуры с прослушивателем вещания?

Я использую широковещательный приемник для обнаружения действий кнопок гарнитуры. Я использую этот код в функции 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();

}

Но это не сработало. В чем проблема? Есть ли другой способ?


person Mehrdad    schedule 25.12.2013    source источник


Ответы (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();

}
person Mehrdad    schedule 30.12.2013
comment
@UpendraShah убедитесь, что ваш слушатель вещания вызывается. В некоторых случаях другие приложения не позволяют прослушивателю вашего приложения получать события. - person Mehrdad; 03.08.2017