Не удается заставить мультимедийные кнопки Bluetooth работать внутри основного действия - PullRequest
1 голос
/ 06 марта 2019

Я знаю, что есть реализация для получения мультимедийных кнопок Bluetooth для Android MediaPlayer, однако я использую MediaPlayer внутри службы.Служба, которую я запускаю и останавливаю из основной активности (которая также управляет графическим интерфейсом), нажимая кнопки Пуск и Стоп.

Здесь это моя основная деятельность.Я постараюсь добавить только необходимый код для этой проблемы, так как моя основная деятельность довольно большая.

public class homepage extends AppCompatActivity implements OnClickListener {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initializeUIElements();
        PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
        final PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "WakeLock:Acquire");
        wakeLock.acquire(10 * 60 * 1000 L);
        Timer wakeLockTimer = new Timer();
        wakeLockTimer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                if (wakeLock.isHeld()) {
                    wakeLock.release();
                    if (!wakeLock.isHeld()) {
                        wakeLock.acquire(10 * 60 * 1000 L);
                    }
                }
            }
        }, 0, 10 * 60 * 1000);
    }
    //Headphone button.
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            return super.onKeyDown(keyCode, event);
        }
        switch (keyCode) {
            case KeyEvent.KEYCODE_MEDIA_PLAY:
                if (!mRunning) {
                    buttonPlayAction();
                    return true;
                }
                break;
            case KeyEvent.KEYCODE_MEDIA_STOP:
                if (mRunning) {
                    stopPlaying();
                    return true;
                }
                break;
            case KeyEvent.KEYCODE_MEDIA_PAUSE:
                if (mRunning) {
                    stopPlaying();
                    return true;
                }
                break;
            case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
                if (!mRunning) {
                    buttonPlayAction();
                    return true;
                } else {
                    stopPlaying();
                    return true;
                }
        }
        return super.onKeyDown(keyCode, event);
    }
}

Я пытаюсь использовать buttonPlayAction();, который является кнопкой Play, и stopPlaying();, который являетсяКнопка Стоп через мультимедийные кнопки Bluetooth.Эти две кнопки запускают и останавливают службу MediaPlayer, поэтому я должен сделать это здесь, а не делать это внутри службы.MediaPlayer должен находиться внутри службы, чтобы он работал в фоновом режиме, но я должен управлять кнопками «Пуск» и «Стоп» из основного действия, потому что мне нужно изменить поведение кнопки после их нажатия, чего я не могу сделать изСам сервис.

Проблема в том, что он не работает.Мое приложение работает с API 21 и новее, так что это более новая реализация мультимедийных кнопок.Я знаю, что до API 21 реализация была другой.Все, что я искал в Интернете, ведет к старой реализации.Я сделал это сам, следуя официальной информации.

Есть что-то, что я пропустил?Я также установил пользовательские разрешения для интернета (поскольку это приложение для интернет-радиопотока), Bluetooth и блокировки пробуждения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...