Java Code Examples for android.support.v4.media.session.PlaybackStateCompat#ACTION_SKIP_TO_NEXT
The following examples show how to use
android.support.v4.media.session.PlaybackStateCompat#ACTION_SKIP_TO_NEXT .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: RemoteControlClientLP.java From Popeens-DSub with GNU General Public License v3.0 | 6 votes |
protected long getPlaybackActions(boolean isSong, int currentIndex, int size) { long actions = PlaybackStateCompat.ACTION_PLAY | PlaybackStateCompat.ACTION_PAUSE | PlaybackStateCompat.ACTION_SEEK_TO | PlaybackStateCompat.ACTION_SKIP_TO_QUEUE_ITEM; if(isSong) { if (currentIndex > 0) { actions |= PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS; } if (currentIndex < size - 1) { actions |= PlaybackStateCompat.ACTION_SKIP_TO_NEXT; } } else { actions |= PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS; actions |= PlaybackStateCompat.ACTION_SKIP_TO_NEXT; } return actions; }
Example 2
Source File: PlaybackManager.java From Melophile with Apache License 2.0 | 6 votes |
private long getAvailableActions() { long actions = PlaybackStateCompat.ACTION_PLAY_PAUSE | PlaybackStateCompat.ACTION_PLAY_FROM_MEDIA_ID | PlaybackStateCompat.ACTION_PLAY_FROM_SEARCH | PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS | PlaybackStateCompat.ACTION_SKIP_TO_NEXT; if (playback.isPlaying()) { actions |= PlaybackStateCompat.ACTION_PAUSE; } else { actions |= PlaybackStateCompat.ACTION_PLAY; } // if (isRepeat) { actions |= PlaybackStateCompat.ACTION_SET_REPEAT_MODE; } // if (isShuffle) { actions |= PlaybackStateCompat.ACTION_SET_SHUFFLE_MODE_ENABLED; } return actions; }
Example 3
Source File: MediaController.java From 365browser with Apache License 2.0 | 5 votes |
/** * Disable pause or seek buttons if the stream cannot be paused or seeked. * This requires the control interface to be a MediaPlayerControlExt */ void updateButtons() { if (mDelegate == null) return; long flags = mDelegate.getActionFlags(); boolean enabled = isEnabled(); if (mPauseButton != null) { boolean needPlayPauseButton = (flags & PlaybackStateCompat.ACTION_PLAY) != 0 || (flags & PlaybackStateCompat.ACTION_PAUSE) != 0; mPauseButton.setEnabled(enabled && needPlayPauseButton); } if (mRewButton != null) { mRewButton.setEnabled(enabled && (flags & PlaybackStateCompat.ACTION_REWIND) != 0); } if (mFfwdButton != null) { mFfwdButton.setEnabled( enabled && (flags & PlaybackStateCompat.ACTION_FAST_FORWARD) != 0); } if (mPrevButton != null) { mShowPrev = (flags & PlaybackStateCompat.ACTION_SKIP_TO_NEXT) != 0 || mPrevListener != null; mPrevButton.setEnabled(enabled && mShowPrev); } if (mNextButton != null) { mShowNext = (flags & PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS) != 0 || mNextListener != null; mNextButton.setEnabled(enabled && mShowNext); } }
Example 4
Source File: MediaPlayerAdapter.java From android-MediaBrowserService with Apache License 2.0 | 5 votes |
/** * Set the current capabilities available on this session. Note: If a capability is not * listed in the bitmask of capabilities then the MediaSession will not handle it. For * example, if you don't want ACTION_STOP to be handled by the MediaSession, then don't * included it in the bitmask that's returned. */ @PlaybackStateCompat.Actions private long getAvailableActions() { long actions = PlaybackStateCompat.ACTION_PLAY_FROM_MEDIA_ID | PlaybackStateCompat.ACTION_PLAY_FROM_SEARCH | PlaybackStateCompat.ACTION_SKIP_TO_NEXT | PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS; switch (mState) { case PlaybackStateCompat.STATE_STOPPED: actions |= PlaybackStateCompat.ACTION_PLAY | PlaybackStateCompat.ACTION_PAUSE; break; case PlaybackStateCompat.STATE_PLAYING: actions |= PlaybackStateCompat.ACTION_STOP | PlaybackStateCompat.ACTION_PAUSE | PlaybackStateCompat.ACTION_SEEK_TO; break; case PlaybackStateCompat.STATE_PAUSED: actions |= PlaybackStateCompat.ACTION_PLAY | PlaybackStateCompat.ACTION_STOP; break; default: actions |= PlaybackStateCompat.ACTION_PLAY | PlaybackStateCompat.ACTION_PLAY_PAUSE | PlaybackStateCompat.ACTION_STOP | PlaybackStateCompat.ACTION_PAUSE; } return actions; }
Example 5
Source File: PlaybackManager.java From klingar with Apache License 2.0 | 5 votes |
private long getAvailableActions() { long actions = PlaybackStateCompat.ACTION_PLAY_PAUSE | PlaybackStateCompat.ACTION_PLAY_FROM_MEDIA_ID | PlaybackStateCompat.ACTION_PLAY_FROM_SEARCH | PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS | PlaybackStateCompat.ACTION_SKIP_TO_NEXT; if (playback.isPlaying()) { actions |= PlaybackStateCompat.ACTION_PAUSE; } else { actions |= PlaybackStateCompat.ACTION_PLAY; } return actions; }
Example 6
Source File: AudioPlayerService.java From react-native-streaming-audio-player with MIT License | 5 votes |
/** * Update the current media player state, optionally showing an error message. */ public void updatePlaybackState() { long position = PlaybackStateCompat.PLAYBACK_POSITION_UNKNOWN; if (mPlayback != null ) { position = mPlayback.getCurrentPosition(); } long actions = PlaybackStateCompat.ACTION_PLAY_PAUSE | PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS | PlaybackStateCompat.ACTION_SKIP_TO_NEXT; if (mPlayback != null && mPlayback.isPlaying()) { actions |= PlaybackStateCompat.ACTION_PAUSE; } else { actions |= PlaybackStateCompat.ACTION_PLAY; } int state = mPlayback.getState(); //noinspection ResourceType PlaybackStateCompat.Builder stateBuilder = new PlaybackStateCompat.Builder() .setActions(actions) .setState(state, position, 1.0f, SystemClock.elapsedRealtime()); mMediaSession.setPlaybackState(stateBuilder.build()); Intent intent = new Intent("change-playback-state-event"); intent.putExtra("state", state); LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent); }
Example 7
Source File: AudioPlayerService.java From react-native-audio-streaming-player with MIT License | 5 votes |
/** * Update the current media player state, optionally showing an error message. */ public void updatePlaybackState() { long position = PlaybackStateCompat.PLAYBACK_POSITION_UNKNOWN; if (mPlayback != null ) { position = mPlayback.getCurrentPosition(); } long actions = PlaybackStateCompat.ACTION_PLAY_PAUSE | PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS | PlaybackStateCompat.ACTION_SKIP_TO_NEXT; if (mPlayback != null && mPlayback.isPlaying()) { actions |= PlaybackStateCompat.ACTION_PAUSE; } else { actions |= PlaybackStateCompat.ACTION_PLAY; } int state = mPlayback.getState(); //noinspection ResourceType PlaybackStateCompat.Builder stateBuilder = new PlaybackStateCompat.Builder() .setActions(actions) .setState(state, position, 1.0f, SystemClock.elapsedRealtime()); mMediaSession.setPlaybackState(stateBuilder.build()); Intent intent = new Intent("change-playback-state-event"); intent.putExtra("state", state); LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent); }
Example 8
Source File: MyMediaBrowserService.java From carstream-android-auto with Apache License 2.0 | 5 votes |
private long getAvailableActions() { long actions = PlaybackStateCompat.ACTION_PLAY_PAUSE | PlaybackStateCompat.ACTION_PLAY_FROM_MEDIA_ID | PlaybackStateCompat.ACTION_PLAY_FROM_SEARCH | PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS | PlaybackStateCompat.ACTION_SKIP_TO_NEXT; return actions; }
Example 9
Source File: MediaNotificationManager.java From carstream-android-auto with Apache License 2.0 | 5 votes |
private int addActions(final NotificationCompat.Builder notificationBuilder) { Log.d(TAG, "updatePlayPauseAction"); int playPauseButtonPosition = 0; // If skip to previous action is enabled if ((mPlaybackState.getActions() & PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS) != 0) { notificationBuilder.addAction(R.drawable.ic_prev, "Previous", mPreviousIntent); // If there is a "skip to previous" button, the playVideo/pauseVideo button will // be the second one. We need to keep track of it, because the MediaStyle notification // requires to specify the index of the buttons (actions) that should be visible // when in compact view. playPauseButtonPosition = 1; } // Play or pauseVideo button, depending on the current state. final String label; final int icon; final PendingIntent intent; if (mPlaybackState.getState() == PlaybackStateCompat.STATE_PLAYING) { label = "Pause"; icon = R.drawable.ic_pause; intent = mPauseIntent; } else { label = "Play"; icon = R.drawable.ic_play; intent = mPlayIntent; } notificationBuilder.addAction(new NotificationCompat.Action(icon, label, intent)); // If skip to next action is enabled if ((mPlaybackState.getActions() & PlaybackStateCompat.ACTION_SKIP_TO_NEXT) != 0) { notificationBuilder.addAction(R.drawable.ic_next, "Next", mNextIntent); } return playPauseButtonPosition; }
Example 10
Source File: WebViewPhoneFragment.java From carstream-android-auto with Apache License 2.0 | 5 votes |
private long getAvailableActions() { long actions = PlaybackStateCompat.ACTION_PLAY_PAUSE | PlaybackStateCompat.ACTION_PLAY_FROM_MEDIA_ID | PlaybackStateCompat.ACTION_PLAY_FROM_SEARCH | PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS | PlaybackStateCompat.ACTION_SKIP_TO_NEXT; // if (true) { // actions |= PlaybackStateCompat.ACTION_PAUSE; // } else { // actions |= PlaybackStateCompat.ACTION_PLAY; // } return actions; }
Example 11
Source File: MediaSessionManager.java From react-native-jw-media-player with MIT License | 5 votes |
public @PlaybackStateCompat.Actions long getCapabilities(PlayerState playerState) { long capabilities = 0; switch (playerState) { case PLAYING: capabilities |= PlaybackStateCompat.ACTION_PAUSE | PlaybackStateCompat.ACTION_STOP | PlaybackStateCompat.ACTION_SEEK_TO; break; case PAUSED: capabilities |= PlaybackStateCompat.ACTION_PLAY | PlaybackStateCompat.ACTION_STOP | PlaybackStateCompat.ACTION_SEEK_TO; break; case BUFFERING: capabilities |= PlaybackStateCompat.ACTION_PAUSE | PlaybackStateCompat.ACTION_STOP | PlaybackStateCompat.ACTION_SEEK_TO; break; case IDLE: if (!mReceivedError && mPlaylist != null && mPlaylist.size() >= 1) { capabilities |= PlaybackStateCompat.ACTION_PLAY; } break; } if (mPlaylist != null && mPlaylist.size() - mPlaylistIndex > 1) { capabilities |= PlaybackStateCompat.ACTION_SKIP_TO_NEXT; } if (mPlaylistIndex > 0 && mPlaylist != null && mPlaylist.size() > 1) { capabilities |= PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS; } return capabilities; }
Example 12
Source File: MediaNotificationManager.java From react-native-audio-streaming-player with MIT License | 4 votes |
private Notification createNotification() { if (mMetadata == null || mPlaybackState == null) { return null; } NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(mService); int playPauseButtonPosition = 0; // If skip to previous action is enabled if ((mPlaybackState.getActions() & PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS) != 0) { notificationBuilder.addAction(R.drawable.ic_skip_previous_white_24dp, "previous", mPreviousIntent); // If there is a "skip to previous" button, the play/pause button will // be the second one. We need to keep track of it, because the MediaStyle notification // requires to specify the index of the buttons (actions) that should be visible // when in compact view. playPauseButtonPosition = 1; } addPlayPauseAction(notificationBuilder); // If skip to next action is enabled if ((mPlaybackState.getActions() & PlaybackStateCompat.ACTION_SKIP_TO_NEXT) != 0) { notificationBuilder.addAction(R.drawable.ic_skip_next_white_24dp, "next", mNextIntent); } MediaDescriptionCompat description = mMetadata.getDescription(); String fetchArtUrl = null; Bitmap art = null; if (description.getIconUri() != null) { // This sample assumes the iconUri will be a valid URL formatted String, but // it can actually be any valid Android Uri formatted String. // async fetch the album art icon String artUrl = description.getIconUri().toString(); art = AlbumArtCache.getInstance().getBigImage(artUrl); if (art == null) { fetchArtUrl = artUrl; // use a placeholder art while the remote art is being downloaded art = BitmapFactory.decodeResource(mService.getResources(), R.drawable.ic_default_art); } } // Basically we use notification icon but it doesn't exist we use launcher icon Context context = mService.getApplicationContext(); int resId = context.getResources().getIdentifier("ic_notification", "drawable", context.getPackageName()); if (resId == 0){ resId = context.getResources().getIdentifier("ic_launcher", "mipmap", context.getPackageName()); } notificationBuilder .setStyle(new NotificationCompat.MediaStyle() .setShowActionsInCompactView(new int[]{playPauseButtonPosition}) // show only play/pause in compact view .setMediaSession(mSessionToken)) .setColor(0xffdf533b) .setSmallIcon(resId) .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) .setUsesChronometer(true) .setContentTitle(description.getTitle()) .setContentText(description.getSubtitle()) .setLargeIcon(art); setNotificationPlaybackState(notificationBuilder); // We should get MainActivity.class to set pendingIntent // If there exists better way, it should place this logic String packageName = mService.getApplicationContext().getPackageName(); Intent launchIntent = mService.getApplicationContext().getPackageManager().getLaunchIntentForPackage(packageName); String className = launchIntent.getComponent().getClassName(); try { Class activityClass = Class.forName(className); notificationBuilder.setContentIntent(createContentIntent(activityClass)); } catch(Exception e) { // do nothing } if (fetchArtUrl != null) { fetchBitmapFromURLAsync(fetchArtUrl, notificationBuilder); } return notificationBuilder.build(); }
Example 13
Source File: PlayerMediaPlayer.java From blade-player with GNU General Public License v3.0 | 4 votes |
public PlaybackStateCompat getPlaybackState() { long actions = PlaybackStateCompat.ACTION_PLAY_FROM_MEDIA_ID | PlaybackStateCompat.ACTION_PLAY_FROM_SEARCH | PlaybackStateCompat.ACTION_SKIP_TO_NEXT | PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS | PlaybackStateCompat.ACTION_SET_REPEAT_MODE | PlaybackStateCompat.ACTION_SET_SHUFFLE_MODE; int playbackState = 0; switch(currentState) { case PLAYER_STATE_PAUSED: actions |= PlaybackStateCompat.ACTION_PLAY | PlaybackStateCompat.ACTION_STOP | PlaybackStateCompat.ACTION_SEEK_TO; playbackState = PlaybackStateCompat.STATE_PAUSED; break; case PLAYER_STATE_PLAYING: actions |= PlaybackStateCompat.ACTION_PAUSE | PlaybackStateCompat.ACTION_STOP | PlaybackStateCompat.ACTION_SEEK_TO; playbackState = PlaybackStateCompat.STATE_PLAYING; break; case PLAYER_STATE_STOPPED: actions |= PlaybackStateCompat.ACTION_PLAY | PlaybackStateCompat.ACTION_PAUSE; playbackState = PlaybackStateCompat.STATE_STOPPED; break; case PLAYER_STATE_NONE: actions |= PlaybackStateCompat.ACTION_PLAY | PlaybackStateCompat.ACTION_PAUSE; playbackState = PlaybackStateCompat.STATE_STOPPED; break; case PLAYER_STATE_DO_NOTHING: actions |= PlaybackStateCompat.ACTION_PLAY | PlaybackStateCompat.ACTION_PAUSE; playbackState = PlaybackStateCompat.STATE_STOPPED; } final PlaybackStateCompat.Builder stateBuilder = new PlaybackStateCompat.Builder(); stateBuilder.setActions(actions); stateBuilder.setState(playbackState, getCurrentPosition(), 1.0f, SystemClock.elapsedRealtime()); return stateBuilder.build(); }
Example 14
Source File: NotificationBuilder.java From YouTube-In-Background with MIT License | 4 votes |
private boolean isSkipToNextEnabled() { return (playbackState.getActions() & PlaybackStateCompat.ACTION_SKIP_TO_NEXT) != 0; }
Example 15
Source File: MediaNotificationManager.java From android-MediaBrowserService with Apache License 2.0 | 4 votes |
private NotificationCompat.Builder buildNotification(@NonNull PlaybackStateCompat state, MediaSessionCompat.Token token, boolean isPlaying, MediaDescriptionCompat description) { // Create the (mandatory) notification channel when running on Android Oreo. if (isAndroidOOrHigher()) { createChannel(); } NotificationCompat.Builder builder = new NotificationCompat.Builder(mService, CHANNEL_ID); builder.setStyle( new MediaStyle() .setMediaSession(token) .setShowActionsInCompactView(0, 1, 2) // For backwards compatibility with Android L and earlier. .setShowCancelButton(true) .setCancelButtonIntent( MediaButtonReceiver.buildMediaButtonPendingIntent( mService, PlaybackStateCompat.ACTION_STOP))) .setColor(ContextCompat.getColor(mService, R.color.notification_bg)) .setSmallIcon(R.drawable.ic_stat_image_audiotrack) // Pending intent that is fired when user clicks on notification. .setContentIntent(createContentIntent()) // Title - Usually Song name. .setContentTitle(description.getTitle()) // Subtitle - Usually Artist name. .setContentText(description.getSubtitle()) .setLargeIcon(MusicLibrary.getAlbumBitmap(mService, description.getMediaId())) // When notification is deleted (when playback is paused and notification can be // deleted) fire MediaButtonPendingIntent with ACTION_STOP. .setDeleteIntent(MediaButtonReceiver.buildMediaButtonPendingIntent( mService, PlaybackStateCompat.ACTION_STOP)) // Show controls on lock screen even when user hides sensitive content. .setVisibility(NotificationCompat.VISIBILITY_PUBLIC); // If skip to next action is enabled. if ((state.getActions() & PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS) != 0) { builder.addAction(mPrevAction); } builder.addAction(isPlaying ? mPauseAction : mPlayAction); // If skip to prev action is enabled. if ((state.getActions() & PlaybackStateCompat.ACTION_SKIP_TO_NEXT) != 0) { builder.addAction(mNextAction); } return builder; }
Example 16
Source File: MediaNotificationManager.java From YouTube-In-Background with MIT License | 4 votes |
private boolean isSkipToNextEnabled() { return (playbackState.getActions() & PlaybackStateCompat.ACTION_SKIP_TO_NEXT) != 0; }
Example 17
Source File: MediaNotificationManager.java From LyricHere with Apache License 2.0 | 4 votes |
private Notification createNotification() { LogUtils.d(TAG, "updateNotificationMetadata. mMetadata=" + mMetadata); if (mMetadata == null || mPlaybackState == null) { return null; } NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(mService); int playPauseButtonPosition = 0; // If skip to previous action is enabled if ((mPlaybackState.getActions() & PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS) != 0) { notificationBuilder.addAction(R.drawable.ic_skip_previous_white_24dp, mService.getString(R.string.label_previous), mPreviousIntent); // If there is a "skip to previous" button, the play/pause button will // be the second one. We need to keep track of it, because the MediaStyle notification // requires to specify the index of the buttons (actions) that should be visible // when in compact view. playPauseButtonPosition = 1; } addPlayPauseAction(notificationBuilder); // If skip to next action is enabled if ((mPlaybackState.getActions() & PlaybackStateCompat.ACTION_SKIP_TO_NEXT) != 0) { notificationBuilder.addAction(R.drawable.ic_skip_next_white_24dp, mService.getString(R.string.label_next), mNextIntent); } MediaDescriptionCompat description = mMetadata.getDescription(); String fetchArtUrl = null; Bitmap art = null; if (description.getIconUri() != null) { // This sample assumes the iconUri will be a valid URL formatted String, but // it can actually be any valid Android Uri formatted String. // async fetch the album art icon String artUrl = description.getIconUri().toString(); art = AlbumArtCache.getInstance().getBigImage(artUrl); if (art == null || art.isRecycled()) { fetchArtUrl = artUrl; // use a placeholder art while the remote art is being downloaded art = BitmapFactory.decodeResource(mService.getResources(), R.drawable.ic_default_art); } } notificationBuilder .setStyle(new NotificationCompat.MediaStyle() .setShowActionsInCompactView( new int[]{playPauseButtonPosition}) // show only play/pause in compact view .setMediaSession(mSessionToken)) .setColor(mNotificationColor) .setSmallIcon(R.drawable.ic_notification) .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) .setUsesChronometer(true) .setContentIntent(createContentIntent(description)) .setContentTitle(description.getTitle()) .setContentText(description.getSubtitle()) .setLargeIcon(art); if (mController != null && mController.getExtras() != null) { String castName = mController.getExtras().getString(MusicService.EXTRA_CONNECTED_CAST); if (castName != null) { String castInfo = mService.getResources() .getString(R.string.casting_to_device, castName); notificationBuilder.setSubText(castInfo); notificationBuilder.addAction(R.drawable.ic_close_black_24dp, mService.getString(R.string.stop_casting), mStopCastIntent); } } setNotificationPlaybackState(notificationBuilder); if (fetchArtUrl != null) { fetchBitmapFromURLAsync(fetchArtUrl, notificationBuilder); } return notificationBuilder.build(); }
Example 18
Source File: MusicControlModule.java From react-native-music-control with MIT License | 4 votes |
@ReactMethod synchronized public void enableControl(String control, boolean enable, ReadableMap options) { init(); Map<String, Integer> skipOptions = new HashMap<String, Integer>(); long controlValue; switch(control) { case "skipForward": if (options.hasKey("interval")) skipOptions.put("skipForward", options.getInt("interval")); controlValue = PlaybackStateCompat.ACTION_FAST_FORWARD; break; case "skipBackward": if (options.hasKey("interval")) skipOptions.put("skipBackward", options.getInt("interval")); controlValue = PlaybackStateCompat.ACTION_REWIND; break; case "nextTrack": controlValue = PlaybackStateCompat.ACTION_SKIP_TO_NEXT; break; case "previousTrack": controlValue = PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS; break; case "play": controlValue = PlaybackStateCompat.ACTION_PLAY; break; case "pause": controlValue = PlaybackStateCompat.ACTION_PAUSE; break; case "togglePlayPause": controlValue = PlaybackStateCompat.ACTION_PLAY_PAUSE; break; case "stop": controlValue = PlaybackStateCompat.ACTION_STOP; break; case "seek": controlValue = PlaybackStateCompat.ACTION_SEEK_TO; break; case "setRating": controlValue = PlaybackStateCompat.ACTION_SET_RATING; break; case "volume": volume = volume.create(enable, null, null); if(remoteVolume) session.setPlaybackToRemote(volume); return; case "remoteVolume": remoteVolume = enable; if(enable) { session.setPlaybackToRemote(volume); } else { session.setPlaybackToLocal(AudioManager.STREAM_MUSIC); } return; case "closeNotification": if(enable) { if (options.hasKey("when")) { if ("always".equals(options.getString("when"))) { this.notificationClose = notificationClose.ALWAYS; }else if ("paused".equals(options.getString("when"))) { this.notificationClose = notificationClose.PAUSED; }else { this.notificationClose = notificationClose.NEVER; } } return; } default: // Unknown control type, let's just ignore it return; } if(enable) { controls |= controlValue; } else { controls &= ~controlValue; } notification.updateActions(controls, skipOptions); pb.setActions(controls); state = pb.build(); session.setPlaybackState(state); updateNotificationMediaStyle(); if(session.isActive()) { notification.show(nb, isPlaying); } }
Example 19
Source File: NotificationWrapper.java From react-native-jw-media-player with MIT License | 4 votes |
public Notification createNotification(Context context, MediaSessionCompat mediaSession, long capabilities ) { int appIcon = context.getResources().getIdentifier("ic_app_icon", "drawable", context.getPackageName()); // Media metadata MediaControllerCompat controller = mediaSession.getController(); MediaMetadataCompat mediaMetadata = controller.getMetadata(); MediaDescriptionCompat description = mediaMetadata.getDescription(); // Notification NotificationCompat.Builder builder = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID); builder.setContentTitle(description.getTitle()) .setContentText(description.getSubtitle()) .setSubText(description.getDescription()) .setLargeIcon(description.getIconBitmap()) .setOnlyAlertOnce(true) .setStyle(new MediaStyle() .setMediaSession(mediaSession.getSessionToken()) .setShowActionsInCompactView(0)) .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) .setSmallIcon(appIcon > 0 ? appIcon : R.drawable.ic_jw_developer) .setDeleteIntent(getActionIntent(context, KeyEvent.KEYCODE_MEDIA_STOP)); // Attach actions to the notification. if ((capabilities & PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS) != 0) { builder.addAction(R.drawable.ic_previous, "Previous", getActionIntent(context, KeyEvent.KEYCODE_MEDIA_PREVIOUS)); } if ((capabilities & PlaybackStateCompat.ACTION_PAUSE) != 0) { builder.addAction(R.drawable.ic_pause, "Pause", getActionIntent(context, KeyEvent.KEYCODE_MEDIA_PAUSE)); } if ((capabilities & PlaybackStateCompat.ACTION_PLAY) != 0) { builder.addAction(R.drawable.ic_play, "Play", getActionIntent(context, KeyEvent.KEYCODE_MEDIA_PLAY) ); } if ((capabilities & PlaybackStateCompat.ACTION_SKIP_TO_NEXT) != 0) { builder.addAction(R.drawable.ic_next, "Next", getActionIntent(context, KeyEvent.KEYCODE_MEDIA_NEXT)); } // We want to resume the existing VideoActivity, over creating a new one. Intent intent = new Intent(context, context.getClass()); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); builder.setContentIntent(pendingIntent); Notification notification = builder.build(); mNotificationManager.notify(NOTIFICATION_ID, notification); return notification; }
Example 20
Source File: MusicPlaybackService.java From tv-samples with Apache License 2.0 | 2 votes |
/** * @return The available set of actions for the media session. These actions should be provided * for the MediaSession PlaybackState in order for * {@link MediaSessionCompat.Callback#onMediaButtonEvent} to call relevant methods of onPause() or * onPlay(). */ private long getPlaybackStateActions() { return PlaybackStateCompat.ACTION_PLAY | PlaybackStateCompat.ACTION_PAUSE | PlaybackStateCompat.ACTION_SKIP_TO_NEXT | PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS; }