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), когда воспроизведение началось.