Java tutorial
/* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.example.android.mediabrowserservice; import android.app.Notification; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.support.v4.media.MediaDescriptionCompat; import android.support.v4.media.MediaMetadataCompat; import android.support.v4.media.session.MediaButtonReceiver; import android.support.v4.media.session.MediaControllerCompat; import android.support.v4.media.session.MediaSessionCompat; import android.support.v4.media.session.PlaybackStateCompat; import android.support.v7.app.NotificationCompat; /** * Helper class for building Media style Notifications from a * {@link android.support.v4.media.session.MediaSessionCompat}. */ public class MediaNotificationHelper { private MediaNotificationHelper() { // Helper utility class; do not instantiate. } public static Notification createNotification(Context context, MediaSessionCompat mediaSession) { MediaControllerCompat controller = mediaSession.getController(); MediaMetadataCompat mMetadata = controller.getMetadata(); PlaybackStateCompat mPlaybackState = controller.getPlaybackState(); if (mMetadata == null || mPlaybackState == null) { return null; } boolean isPlaying = mPlaybackState.getState() == PlaybackStateCompat.STATE_PLAYING; NotificationCompat.Action action = isPlaying ? new NotificationCompat.Action(R.drawable.ic_pause_white_24dp, context.getString(R.string.label_pause), MediaButtonReceiver.buildMediaButtonPendingIntent(context, PlaybackStateCompat.ACTION_PAUSE)) : new NotificationCompat.Action(R.drawable.ic_play_arrow_white_24dp, context.getString(R.string.label_play), MediaButtonReceiver .buildMediaButtonPendingIntent(context, PlaybackStateCompat.ACTION_PLAY)); MediaDescriptionCompat description = mMetadata.getDescription(); Bitmap art = description.getIconBitmap(); if (art == null) { // use a placeholder art while the remote art is being downloaded. art = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_default_art); } NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context); notificationBuilder.setStyle(new NotificationCompat.MediaStyle() // show only play/pause in compact view. .setShowActionsInCompactView(new int[] { 0 }).setMediaSession(mediaSession.getSessionToken())) .addAction(action).setSmallIcon(R.drawable.ic_notification).setShowWhen(false) .setContentIntent(controller.getSessionActivity()).setContentTitle(description.getTitle()) .setContentText(description.getSubtitle()).setLargeIcon(art) .setVisibility(NotificationCompat.VISIBILITY_PUBLIC); return notificationBuilder.build(); } }