【发布时间】:2015-06-22 19:46:55
【问题描述】:
我想使用 MediaSession 制作一个 android 磨损通知,该通知在一个页面上有几个按钮,在另一个页面上有一些其他按钮。它看起来像 Android Wear 上的 Google Play Now 应用通知。我在https://github.com/PaulTR/AndroidDemoProjects/blob/master/MediaSessionwithMediaStyleNotification/app/src/main/java/com/ptrprograms/mediasessionwithmediastylenotification/MediaPlayerService.java
关注了这个 github 教程但是,每个动作都被添加到 android wear 的单独页面中。我想将其中一些分组到一页中。例如,播放/暂停、前一页和下一页以及第二页上的速率按钮。我想知道是否可以在不使用 MediaSession 的情况下通过自定义通知来实现这一点,以便涵盖小于 21 的 API。
谢谢!
private void buildNotification( Notification.Action action ) {
Notification.MediaStyle style = new Notification.MediaStyle();
Intent intent = new Intent( getApplicationContext(), MediaPlayerService.class );
intent.setAction( ACTION_STOP );
PendingIntent pendingIntent = PendingIntent.getService(getApplicationContext(), 1, intent, 0);
Notification.Builder builder = new Notification.Builder( this )
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle( "Media Title" )
.setContentText( "Media Artist" )
.setDeleteIntent( pendingIntent )
.setStyle(style);
builder.addAction( generateAction( android.R.drawable.ic_media_previous, "Previous", ACTION_PREVIOUS ) );
builder.addAction( generateAction( android.R.drawable.ic_media_rew, "Rewind", ACTION_REWIND ) );
builder.addAction( action );
builder.addAction( generateAction( android.R.drawable.ic_media_ff, "Fast Foward", ACTION_FAST_FORWARD ) );
builder.addAction( generateAction( android.R.drawable.ic_media_next, "Next", ACTION_NEXT ) );
style.setShowActionsInCompactView(0,1,2,3,4);
NotificationManager notificationManager = (NotificationManager) getSystemService( Context.NOTIFICATION_SERVICE );
notificationManager.notify( 1, builder.build() );
}
更新的代码:当我向 setMediaSession 传递一个令牌时,它给出了这个编译错误:NotificationCompat.MediaStyle 类型中的方法 setMediaSession(MediaSessionCompat.Token) 不适用于参数 (MediaSession.Token)。这 3 个动作仍然显示在 android wear 的 3 个单独页面上。
private void buildNotification( Notification.Action action ) {
NotificationCompat.MediaStyle style = new NotificationCompat.MediaStyle();
//style.setMediaSession(mSession.getSessionToken());
style.setMediaSession(null);
style.setShowActionsInCompactView(1,2);
Bitmap icon = BitmapFactory.decodeResource(this.getResources(), R.drawable.pinkfloyd);
NotificationCompat.Builder builder = new NotificationCompat.Builder( this );
builder.setSmallIcon(R.drawable.ic_launcher);
builder.setLargeIcon(icon);
builder.setContentTitle( "Media Title" );
builder.setContentText( "Media Artist" );
builder.setColor(Color.argb(0, 60, 13, 77));
builder.setStyle(style);
builder.addAction(R.drawable.ic_launcher,
"Test1 ", null);
builder.addAction(R.drawable.ic_launcher,
"Test2 ", null);
builder.addAction(R.drawable.ic_launcher,
"Test3 ", null);
NotificationManager notificationManager = (NotificationManager) getSystemService( Context.NOTIFICATION_SERVICE );
notificationManager.notify( 1, builder.build() );
}
【问题讨论】:
-
您没有使用MediaSessionCompat 代替MediaSession 有什么原因吗?相同的 API,但也向后兼容。
标签: java android notifications wear-os