Как обрабатывать длительное нажатие медиа-кнопки, чтобы начать активность? - PullRequest
0 голосов
/ 30 июля 2010

Хотелось бы узнать, как запустить мероприятие при долгом нажатии медиа кнопки.В этом случае я не хочу запускать действие по умолчанию: средство чтения мультимедиа, оно должно продолжать работать при коротком нажатии кнопки мультимедиа.

Надеюсь, я объяснил.

AL

Дополнительный вопрос: почему какой-то жесткий ключ, например кнопка поиска, может напрямую запускать действие, указав его в атрибуте Activity файла manifest.xml, а другие, такие как кнопка мультимедиа, упоминаются только для трансляциидействие?

1 Ответ

7 голосов
/ 28 марта 2011

Я думаю, что вам нужно сделать следующее:

  1. Добавить это в свой манифест:

    <receiver android:name="com.example.MediaButtonReceiver">
       <intent-filter android:priority="1000000000">
        <action android:name="android.intent.action.MEDIA_BUTTON" />
       </intent-filter>
        </receiver>
    
  2. Создать класс MediaButtonReceiver:

    public class MediaButtonReceiver extends BroadcastReceiver {
        public void onReceive(Context context, Intent intent) {
            String intentAction = intent.getAction();
            if (Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) {
                    KeyEvent event = (KeyEvent)
                    intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
    
            if (event == null) {
                return;
            }
    
            int keycode = event.getKeyCode();
            int action = event.getAction();
            long eventtime = event.getEventTime();
    
            if (keycode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE || keycode == KeyEvent.KEYCODE_HEADSETHOOK) {
                if (action == KeyEvent.ACTION_DOWN) {
                    // Start your app here!
    
                    // ...
    
                    if (isOrderedBroadcast()) {
                        abortBroadcast();
                    }
                }
            }
        }
    }
    

Я в основном скопировал это отсюда: https://android.googlesource.com/platform/packages/apps/Music/+/master/src/com/android/music/MediaButtonIntentReceiver.java

Кроме того, это зависит от заказа трансляции MEDIA_BUTTON, который я предполагаюэто.Приоритет должен быть установлен на что-то выше, чем медиа-приложение.К сожалению, мультимедийное приложение использует приоритет по умолчанию, и в документации не сказано, что это такое (quelle Surprise).

...