问题描述
我试图实施使用该媒体样式的通知href=\"http://www.bin$p$pss.com/tutorial/using-android-media-style-notifications-with-media-session-controls/165\"相对=nofollow>链接。然而,当我最近更新到Android 5.0 SDK中,了createSession
方法是行不通的。
I tried implementing the Media Style Notification
using this link. However when I recently updated to Android 5.0 SDK, the createSession
method is not working.
mMediaPlayer = new MediaPlayer();
mManager = (MediaSessionManager) getSystemService(Context.MEDIA_SESSION_SERVICE);
mSession = mManager.createSession("sample session"); //shows compile error
mController = MediaController.fromToken( mSession.getSessionToken() );
是否有需要可以使用任何其他的方法?当我检查更改日志,它说,了createSession
不再使用。有什么办法,然后实施这样的媒体风格通知。
Is there any other method that needs to be used? When I checked the change log, it said that createSession
is no longer used. What are the alternatives then for implementing such media style notifications.
推荐答案
您不再使用 MediaController.fromToken
,而是<$c$c>MediaSessin.getController$c$c>.
而不再使用 MediaSessionManager.createSession
,而是只需要创建一个新的 MediaSession
对象和<$c$c>MediaSession.getSessionToken$c$c>找回你的<$c$c>MediaSession.Token$c$c>.
You no longer use MediaController.fromToken
, but instead MediaSessin.getController
.And you no longer use MediaSessionManager.createSession
, but instead just create a new MediaSession
object and MediaSession.getSessionToken
to retrieve your MediaSession.Token
.
一个非常基本的示例实现可能是这样的:
A very basic example implementation might be something like:
private static final String ACTION_TOGGLE_PLAYBACK = "com.your.package.name.TOGGLE_PLAYBACK";
private static final String ACTION_PREV = "com.your.package.name.PREV";
private static final String ACTION_NEXT = "com.your.package.name.NEXT";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
final Bitmap artwork = ...;
// Create a new MediaSession
final MediaSession mediaSession = new MediaSession(this, "debug tag");
// Update the current metadata
mediaSession.setMetadata(new MediaMetadata.Builder()
.putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, artwork)
.putString(MediaMetadata.METADATA_KEY_ARTIST, "Pink Floyd")
.putString(MediaMetadata.METADATA_KEY_ALBUM, "Dark Side of the Moon")
.putString(MediaMetadata.METADATA_KEY_TITLE, "The Great Gig in the Sky")
.build());
// Indicate you're ready to receive media commands
mediaSession.setActive(true);
// Attach a new Callback to receive MediaSession updates
mediaSession.setCallback(new MediaSession.Callback() {
// Implement your callbacks
});
// Indicate you want to receive transport controls via your Callback
mediaSession.setFlags(MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS);
// Create a new Notification
final Notification noti = new Notification.Builder(this)
// Hide the timestamp
.setShowWhen(false)
// Set the Notification style
.setStyle(new Notification.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(0xFFDB4437)
// Set the large and small icons
.setLargeIcon(artwork)
.setSmallIcon(R.drawable.your_small_icon)
// Set Notification content information
.setContentText("Pink Floyd")
.setContentInfo("Dark Side of the Moon")
.setContentTitle("The Great Gig in the Sky")
// Add some playback controls
.addAction(R.drawable.your_prev_icon, "prev", retreivePlaybackAction(3))
.addAction(R.drawable.your_pause_icon, "pause", retreivePlaybackAction(1))
.addAction(R.drawable.your_next_icon, "next", retreivePlaybackAction(2))
.build();
// Do something with your TransportControls
final TransportControls controls = mediaSession.getController().getTransportControls();
((NotificationManager) getSystemService(NOTIFICATION_SERVICE)).notify(1, noti);
}
private PendingIntent retreivePlaybackAction(int which) {
Intent action;
PendingIntent pendingIntent;
final ComponentName serviceName = new ComponentName(this, YourPlaybackService.class);
switch (which) {
case 1:
// Play and pause
action = new Intent(ACTION_TOGGLE_PLAYBACK);
action.setComponent(serviceName);
pendingIntent = PendingIntent.getService(this, 1, action, 0);
return pendingIntent;
case 2:
// Skip tracks
action = new Intent(ACTION_NEXT);
action.setComponent(serviceName);
pendingIntent = PendingIntent.getService(this, 2, action, 0);
return pendingIntent;
case 3:
// Previous tracks
action = new Intent(ACTION_PREV);
action.setComponent(serviceName);
pendingIntent = PendingIntent.getService(this, 3, action, 0);
return pendingIntent;
default:
break;
}
return null;
}
结果
这篇关于更新后的媒体样式通知不工作至Android 5.0的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!