Обнаружение щелчка наушников и открытие действия на android - PullRequest
1 голос
/ 04 мая 2020

У меня проблема здесь, я пытаюсь создать что-то вроде Google Assistant, когда вы нажимаете кнопку воспроизведения или паузы в гарнитуре, она должна быть передана вещателем и начать новое действие

Вот что у меня есть:

Файл манифеста

<receiver android:name=".services.MediaButtonReceiver">
            <intent-filter android:priority="2147483647">
                <action android:name="android.intent.action.MEDIA_BUTTON"/>
            </intent-filter>
        </receiver>

Файл приемника широковещания

public void onReceive(Context context, Intent intent) {
        Log.i("Invisible mode", "Receieved broadcast");
        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){
                Log.i("Invisible mode", "Identified media play pause");
                if (action == KeyEvent.ACTION_DOWN){
                    Log.i("Invisible mode", "Found action down");
                    MainActivity.isInvisibleMode = true;
                   Intent main = new Intent();
                   main.setClassName("co.za.ss.mn", "co.za.ss.mn.MainActivity");
                   main.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    Log.i("Invisible mode", "Starting main activity in invisible mode");
                   context.startActivity(main);
                }
            }
        }
    }

, и в моей MainActivity я попытался добавить несколько строк в зарегистрировать получателя

IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("android.intent.action.MEDIA_BUTTON");
        registerReceiver(new MediaButtonReceiver(), intentFilter );
       ((AudioManager) getSystemService(AUDIO_SERVICE)).registerMediaButtonEventReceiver(new ComponentName(this, MediaButtonReceiver.class));

Я получаю это предупреждение в журнале регистрации вместо того, чтобы поместить его в свой вещатель

Cancelling event due to no window focus: KeyEvent { action=ACTION_UP, keyCode=KEYCODE_HEADSETHOOK, scanCode=226, metaState=0, flags=0xa8, repeatCount=0, eventTime=184566337, downTime=184565800, deviceId=1, source=0x101 }

Может кто-нибудь показать мне, что я делаю неправильно? Всякий раз, когда я нажимаю кнопку гарнитуры, на моем устройстве Android 9

ничего не происходит.

1 Ответ

1 голос
/ 04 мая 2020
  1. Можете ли вы увеличить приоритет в файле манифеста до 1000000000000000
  2. Вы можете использовать KeyEventListener для прослушивания KEYCODE_MEDIA_PLAY_PAUSE и KEYCODE_HEADSETHOOK, когда ваша деятельность находится на переднем плане.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...