#java #android #service
#java #Android #Обслуживание
Вопрос:
Я создал приложение mediaplayer, которое воспроизводит песни в фоновом режиме с помощью сервиса. У меня есть уведомление, в котором отображаются кнопки previous, pause / play и next.
Эти кнопки работают, но я хотел бы изменить состояние кнопок паузы / воспроизведения в своей активности, когда я нажимаю кнопку паузы / воспроизведения в своем уведомлении.
Поэтому, когда я, например, приостанавливаю песню в своем уведомлении, я хочу, чтобы она также изменила мою кнопку в моем действии на паузу.
Как я могу это сделать?
Код для уведомления в моей службе, который обрабатывает состояние кнопок, передавая playBackStatus (предыдущий, Пауза / воспроизведение, следующий).
private void NotificationBuilder(PlaybackStatus playbackStatus){
int notificationAction = R.drawable.ic_action_pause_white;
PendingIntent play_pause_action = null;
if (playbackStatus == PlaybackStatus.PLAYING){
//Pause button created when song is PLAYING
notificationAction = R.drawable.ic_action_pause_white;
play_pause_action = playbackAction(1);
}else if (playbackStatus == PlaybackStatus.PAUSED){
//Play button created when song is PAUSED
notificationAction = R.drawable.ic_action_play;
play_pause_action = playbackAction(0);
}
Редактировать:
play_pause_action — это PendingIntent
notificationBuilder.setShowWhen(false)
.setStyle(new android.support.v4.media.app.NotificationCompat.MediaStyle().setMediaSession(mMediaSessionCompat.getSessionToken()).setShowActionsInCompactView(0, 1 ,2))
.setSmallIcon(android.R.drawable.stat_sys_headset).setContentTitle(activeSong.getTitle()).setContentText(activeSong.getArtist())
.addAction(R.drawable.ic_action_prev_white, null, playbackAction(3))
.addAction(notificationAction, null, play_pause_action).addAction(R.drawable.ic_action_next_white, null, playbackAction(2))
.setColor(getResources().getColor(R.color.theme1));
private PendingIntent playbackAction(int actionNumber) {
Intent playbackAction = new Intent(this, MediaPlayerService.class);
switch (actionNumber) {
case 0:
// Play
playbackAction.setAction(Constants.ACTIONS.mACTION_PLAY);
return PendingIntent.getService(this, actionNumber, playbackAction, 0);
case 1:
// Pause
playbackAction.setAction(Constants.ACTIONS.mACTION_PAUSE);
return PendingIntent.getService(this, actionNumber, playbackAction, 0);
case 2:
// Next track
playbackAction.setAction(Constants.ACTIONS.mACTION_NEXT);
return PendingIntent.getService(this, actionNumber, playbackAction, 0);
case 3:
// Previous track
playbackAction.setAction(Constants.ACTIONS.mACTION_PREVIOUS);
return PendingIntent.getService(this, actionNumber, playbackAction, 0);
default:
break;
}
return null;
}
Ответ №1:
попробуйте это :
Button btn=((Button)MainActivity.this.findViewById(R.id.btnPlay));
if (playbackStatus == PlaybackStatus.PLAYING){
//Pause button created when song is PLAYING
btn.setImageResource(R.drawable.pause);
notificationAction = R.drawable.ic_action_pause_white;
play_pause_action = playbackAction(1);
}else if (playbackStatus == PlaybackStatus.PAUSED){
//Play button created when song is PAUSED
btn.setImageResource(R.drawable.play);
notificationAction = R.drawable.ic_action_play;
play_pause_action = playbackAction(0);
}
Комментарии:
1. Спасибо за ответ, но в моем приложении есть Activity с фрагментами, а кнопки находятся в моем MainActivity, который снова не вызывает onCreate / onResume, поэтому это не сработает. Мне нужно что-то, что прослушивает, когда я нажимаю кнопку в своем уведомлении, а затем взаимодействует с моей MainActivity, уведомляя о том, что кнопка в моем уведомлении была нажата.
2. но, согласно UX, вы не могли показывать уведомление с помощью кнопки воспроизведения / паузы и воспроизведения / паузы MainActivity одновременно
3. Я использовал PendingIntent, который прослушивает состояние воспроизведения / паузы, проверьте мое редактирование
4. У меня есть действие, в котором перечислены все песни на устройстве, когда я нажимаю на одну, она начинает воспроизводиться и создает уведомление для этой песни.
Ответ №2:
Создайте интерфейс, после чего вы сможете обрабатывать button.в вашем интерфейсе добавьте метод, подобный example handleMybutton (View v) { обрабатывайте свою кнопку, что бы вы ни хотели сделать}