MediaButtonReceiver не работает, когда приложение находится в фоновом режиме

Я использовал это руководство, чтобы добавить MediaButtonReceiver особенность моего приложения медиаплеера.

Это работает хорошо, пока приложение находится на переднем плане, но как только приложение переходит в фоновый режим, оно перестает получать действия мультимедийных кнопок.

Часть манифеста

<service
            android:name=".playback.PlayerService"
            android:exported="true">
            <intent-filter>
                <action android:name="android.media.browse.MediaBrowserService"/>
            </intent-filter>

        </service>
<receiver android:name="android.support.v4.media.session.MediaButtonReceiver">
            <intent-filter>
                <action android:name="android.intent.action.MEDIA_BUTTON"/>
            </intent-filter>
        </receiver>

Часть медиа-проигрывателя

 @Override
    public void onCreate() {
        Timber.d("onCreate: ");
        super.onCreate();
        startService(new Intent(getApplicationContext(), PlayerService.class));
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Timber.d("onStartCommand: ");
        sessionCompat = new MediaSessionCompat(this, TAG);
        setControllerCompat(new MediaControllerCompat(getApplicationContext(), sessionCompat));
        sessionCompat.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS |
                MediaSessionCompat.FLAG_HANDLES_QUEUE_COMMANDS);
        sessionCompat.setCallback(sessionCallback);
        setSessionToken(sessionCompat.getSessionToken());
        sessionCompat.setShuffleMode(playerHelper.getShuffleMode());
        sessionCompat.setRepeatMode(playerHelper.getRepeatMode());
        MediaButtonReceiver.handleIntent(sessionCompat, intent);
        return START_NOT_STICKY;
    }

Пожалуйста, что я сделал не так и как я могу заставить сервис получать действия кнопок, когда приложение находится на переднем плане?

2 ответа

Ваш сервис должен выглядеть так

<service android:name=".playback.PlayerService"
         android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.MEDIA_BUTTON" />
        <action android:name="android.media.browse.MediaBrowserService" />
    </intent-filter>
</service>

Я обнаружил проблему. Я сделал очень глупую ошибку, не вызывая MediaSessionCompat#setActive(true), когда воспроизведение началось.

Другие вопросы по тегам