Java 在音乐应用程序的通知栏中更改歌曲时,不会更改歌曲名称和专辑艺术

Java 在音乐应用程序的通知栏中更改歌曲时,不会更改歌曲名称和专辑艺术,java,android,service,android-notifications,Java,Android,Service,Android Notifications,单击“下一步”或“上一步”按钮更改歌曲时,歌曲名称不会更改。专辑艺术也是如此。下面是我用于通知的服务类的代码 public class MediaPlayerService extends Service { Notification status; private MainActivity main; @Override public void onDestroy() { super.onDestroy(); } @Ove

单击“下一步”或“上一步”按钮更改歌曲时,歌曲名称不会更改。专辑艺术也是如此。下面是我用于通知的服务类的代码

public class MediaPlayerService extends Service {



   Notification status;
    private MainActivity main;

    @Override
    public void onDestroy() {
        super.onDestroy();
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        if (intent.getAction().equals(Constants.ACTION.STARTFOREGROUND_ACTION)) {
            showNotification();
        } else if (intent.getAction().equals(Constants.ACTION.PREV_ACTION)) {
            Previous();
        } else if (intent.getAction().equals(Constants.ACTION.PLAY_ACTION)) {
            Play();
        } else if (intent.getAction().equals(Constants.ACTION.NEXT_ACTION)) {
            Next();
        } else if (intent.getAction().equals(Constants.ACTION.STOPFOREGROUND_ACTION)) {
            Close();
            stopForeground(true);
            stopSelf();
        }
        return START_STICKY;
    }

    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
    private void showNotification() {

        main = new MainActivity();
        RemoteViews views = new RemoteViews(getPackageName(),
                R.layout.notification_view);
        RemoteViews bigViews = new RemoteViews(getPackageName(),
                R.layout.notification_view);

        views.setViewVisibility(R.id.status_bar_icon, View.VISIBLE);
        views.setViewVisibility(R.id.iv_noti_icon, View.VISIBLE);
        bigViews.setImageViewBitmap(R.id.iv_noti_icon,
                Constants.getDefaultAlbumArt(this));

        Intent notificationIntent = new Intent(this, MainActivity.class);
        notificationIntent.setAction(Constants.ACTION.MAIN_ACTION);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
                notificationIntent, 0);

        Intent previousIntent = new Intent(this, MediaPlayerService.class);
        previousIntent.setAction(Constants.ACTION.PREV_ACTION);
        previousIntent.putExtra("DO", "Previous");
        PendingIntent ppreviousIntent = PendingIntent.getService(this, 0,
                previousIntent, 0);

        Intent playIntent = new Intent(this, MediaPlayerService.class);
        playIntent.setAction(Constants.ACTION.PLAY_ACTION);
        playIntent.putExtra("DO", "Play");
        PendingIntent pplayIntent = PendingIntent.getService(this, 0,
                playIntent, 0);

        Intent nextIntent = new Intent(this, MediaPlayerService.class);
        nextIntent.setAction(Constants.ACTION.NEXT_ACTION);
        nextIntent.putExtra("DO", "Next");
        PendingIntent pnextIntent = PendingIntent.getService(this, 0,
                nextIntent, 0);

        Intent closeIntent = new Intent(this, MediaPlayerService.class);
        closeIntent.setAction(Constants.ACTION.STOPFOREGROUND_ACTION);
        closeIntent.putExtra("DO", "Close");
        PendingIntent pcloseIntent = PendingIntent.getService(this, 0,
                closeIntent, 0);

        views.setOnClickPendingIntent(R.id.btn_noti_play, pplayIntent);
        bigViews.setOnClickPendingIntent(R.id.btn_noti_play, pplayIntent);

        views.setOnClickPendingIntent(R.id.btn_noti_next, pnextIntent);
        bigViews.setOnClickPendingIntent(R.id.btn_noti_next, pnextIntent);

        views.setOnClickPendingIntent(R.id.btn_noti_previous, ppreviousIntent);
        bigViews.setOnClickPendingIntent(R.id.btn_noti_previous, ppreviousIntent);

        views.setOnClickPendingIntent(R.id.reboot, pcloseIntent);
        bigViews.setOnClickPendingIntent(R.id.reboot, pcloseIntent);

        views.setImageViewResource(R.id.btn_noti_play,
                R.drawable.ic_pause_white);
        bigViews.setImageViewResource(R.id.btn_noti_play,
                R.drawable.ic_pause_white);

        views.setTextViewText(R.id.tv_noti_title, "Song Title");
        bigViews.setTextViewText(R.id.tv_noti_title, "Song Title");

        views.setTextViewText(R.id.tv_noti_artist, "Artist Name");
        bigViews.setTextViewText(R.id.tv_noti_artist, "Artist Name");

        bigViews.setTextViewText(R.id.tv_noti_tag, "Album Name");

        status = new Notification.Builder(this).build();
        status.contentView = views;
        status.flags = Notification.FLAG_ONGOING_EVENT;
        status.icon = R.drawable.ic_notification;
        status.contentIntent = pendingIntent;
        startForeground(Constants.NOTIFICATION_ID.FOREGROUND_SERVICE, status);

        bigViews.setTextViewText(R.id.tv_noti_title, arrayList.get(next).getSongName());
        bigViews.setTextViewText(R.id.tv_noti_artist, arrayList.get(next).getSingers());
        bigViews.setTextViewText(R.id.tv_noti_tag, arrayList.get(next).getAlbum());
    }

    private void Play() {
        RemoteViews bigViews = new RemoteViews(getPackageName(), R.layout.notification_view);

        if (!mediaPlayer.isPlaying()) {
            main.PlaySong(next, arrayList,  "0");
            bigViews.setImageViewResource(R.id.btn_noti_play, R.drawable.ic_pause_white);
            bigViews.setTextViewText(R.id.tv_noti_title, arrayList.get(next).getSongName());
            bigViews.setTextViewText(R.id.tv_noti_artist, arrayList.get(next).getSingers());
            bigViews.setTextViewText(R.id.tv_noti_tag, arrayList.get(next).getAlbum());
        } else {
            mediaPlayer.pause();
            bigViews.setImageViewResource(R.id.btn_noti_play, R.drawable.ic_play_white);
        }
    }

    private void Next() {
        RemoteViews bigViews = new RemoteViews(getPackageName(), R.layout.notification_view);
        next++;
        main.PlaySong(next, arrayList, "0");
        bigViews.setImageViewResource(R.id.btn_noti_play, R.drawable.ic_pause_white);
        bigViews.setTextViewText(R.id.tv_noti_title, arrayList.get(next).getSongName());
        bigViews.setTextViewText(R.id.tv_noti_artist, arrayList.get(next).getSingers());
        bigViews.setTextViewText(R.id.tv_noti_tag, arrayList.get(next).getAlbum());
    }

    private void Previous() {
        RemoteViews bigViews = new RemoteViews(getPackageName(), R.layout.notification_view);
        next--;
        main.PlaySong(next,arrayList, "0");
        bigViews.setImageViewResource(R.id.btn_noti_play, R.drawable.ic_pause_white);
        bigViews.setTextViewText(R.id.tv_noti_title, arrayList.get(next).getSongName());
        bigViews.setTextViewText(R.id.tv_noti_artist, arrayList.get(next).getSingers());
        bigViews.setTextViewText(R.id.tv_noti_tag, arrayList.get(next).getAlbum());
    }

    private void Close() {
        mediaPlayer.stop();
    }
}
我正在音乐应用程序中使用此服务类。在此应用程序中,歌曲通过实时流媒体播放。就像“gaana”应用程序和“saavn”应用程序一样。

呼叫

NotificationManager.notify(id,notification)

让通知系统知道您想在Next()和previous()方法中更新通知视图

这是文档链接


希望有帮助。

谢谢。这对我很有帮助。我解决了我的问题。再次感谢你。