管理Android中的媒体播放器通知



我已经能够从服务器流式传输音频,并且还能够显示音频开始播放时的通知控件,但通知通常暂时没有。我现在的问题是如何获取音频标题并显示在通知中,因此我尝试了此代码

Intent intent = new Intent( getApplicationContext(), NotificationService.class );
                intent.setAction(STARTFOREGROUND_ACTION );
                intent.putExtra("title",title);
                startService( intent );

启动通知服务时,我试图将歌曲的标题发送到NotificationService.class(根据我的代码中的项目标题从服务器中获取歌曲(,但我无法在NotificationService.class

这是我的NotificationService.class,我尝试接收意图,但它返回null

 private void showNotification() {
    createNotificationChanel();
    RemoteViews views = new RemoteViews(getPackageName(),
            R.layout.status_bar);
    RemoteViews bigViews = new RemoteViews(getPackageName(),
            R.layout.status_bar_expanded);
    // trying to receive intent
    Intent intent = new Intent();
    String title = intent.getStringExtra("title");

// showing default album image
    views.setViewVisibility(R.id.status_bar_icon, View.VISIBLE);
    views.setViewVisibility(R.id.status_bar_album_art, View.GONE);
    bigViews.setImageViewBitmap(R.id.status_bar_album_art,
            Constants.getDefaultAlbumArt(this));
    Intent notificationIntent = new Intent(this, MainActivity.class);
    notificationIntent.setAction(Constants.ACTION.MAIN_ACTION);
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
            | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
            notificationIntent, 0);
    Intent previousIntent = new Intent(this, NotificationService.class);
    previousIntent.setAction(Constants.ACTION.PREV_ACTION);
    PendingIntent ppreviousIntent = PendingIntent.getService(this, 0,
            previousIntent, 0);
    Intent playIntent = new Intent(this, NotificationService.class);
    playIntent.setAction(Constants.ACTION.PLAY_ACTION);
    PendingIntent pplayIntent = PendingIntent.getService(this, 0,
            playIntent, 0);
    Intent nextIntent = new Intent(this, NotificationService.class);
    nextIntent.setAction(Constants.ACTION.NEXT_ACTION);
    PendingIntent pnextIntent = PendingIntent.getService(this, 0,
            nextIntent, 0);
    Intent closeIntent = new Intent(this, NotificationService.class);
    closeIntent.setAction(Constants.ACTION.STOPFOREGROUND_ACTION);
    PendingIntent pcloseIntent = PendingIntent.getService(this, 0,
            closeIntent, 0);
    views.setOnClickPendingIntent(R.id.status_bar_play, pplayIntent);
    bigViews.setOnClickPendingIntent(R.id.status_bar_play, pplayIntent);
    views.setOnClickPendingIntent(R.id.status_bar_next, pnextIntent);
    bigViews.setOnClickPendingIntent(R.id.status_bar_next, pnextIntent);
    views.setOnClickPendingIntent(R.id.status_bar_prev, ppreviousIntent);
    bigViews.setOnClickPendingIntent(R.id.status_bar_prev, ppreviousIntent);
    views.setOnClickPendingIntent(R.id.status_bar_collapse, pcloseIntent);
    bigViews.setOnClickPendingIntent(R.id.status_bar_collapse, pcloseIntent);
    views.setImageViewResource(R.id.status_bar_play,
            R.drawable.apollo_holo_dark_pause);
    bigViews.setImageViewResource(R.id.status_bar_play,
            R.drawable.apollo_holo_dark_pause);
    views.setTextViewText(R.id.status_bar_track_name, "Song Title");
    bigViews.setTextViewText(R.id.status_bar_track_name, "Song Title");
    views.setTextViewText(R.id.status_bar_artist_name, "Artist Name");
    bigViews.setTextViewText(R.id.status_bar_artist_name, "Artist Name");
    bigViews.setTextViewText(R.id.status_bar_album_name, "Album Name");
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        status = new Notification.Builder(this,CHANEL_ID).build();
    }
    status.contentView = views;
    status.bigContentView = bigViews;
    status.flags = Notification.FLAG_ONGOING_EVENT;
    status.icon = R.mipmap.ic_launcher_custom;
    status.contentIntent = pendingIntent;
    startForeground(Constants.NOTIFICATION_ID.FOREGROUND_SERVICE, status);
}

您可以使用以下代码创建媒体通知

Bitmap largeIcon = BitmapFactory.decodeResource(getResources(),
            R.drawable.image4); //replace with your own image

    // Create a new Notification
    NotificationCompat.Builder notificationBuilder = (NotificationCompat.Builder) new NotificationCompat.Builder(this, CHANNEL_ID)
            // Hide the timestamp
            .setShowWhen(false)
            // Set the Notification style
            .setStyle(new androidx.media.app.NotificationCompat.MediaStyle()
                    // Attach our MediaSession token
                    .setMediaSession(mediaSession.getSessionToken())
                    // Show our playback controls in the compat view
                    .setShowActionsInCompactView(0, 1, 2))
            // Set the Notification color
            .setColor(getResources().getColor(R.color.colorAccent))
            // Set the large and small icons
            .setLargeIcon(largeIcon)
            .setSmallIcon(android.R.drawable.stat_sys_headset)
            // Set Notification content information
            .setContentText("activeAudio.getArtist()")
            .setContentTitle("activeAudio.getAlbum()")
            .setContentInfo("activeAudio.getTitle()")
            // Add playback actions
            .addAction(R.drawable.ic_replay_10_black_24dp, "previous", playbackAction(3))
            .addAction(notificationAction, "pause", play_pauseAction)
            .addAction(R.drawable.ic_forward_10_black_24dp, "next", playbackAction(2));
    ((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).notify(NOTIFICATION_ID, notificationBuilder.build());

最新更新