Как обновить пользовательский интерфейс activity при нажатии кнопки в моем уведомлении?

#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) { обрабатывайте свою кнопку, что бы вы ни хотели сделать}