使用MediaSession的java Android磨损通知
我想使用MediaSession制作一个安卓磨损通知,它在一个页面上有几个按钮,在另一个页面上有一些其他按钮。这看起来像是安卓 wear上的Google Play Now应用程序通知。我在https://github.com/PaulTR/AndroidDemoProjects/blob/master/MediaSessionwithMediaStyleNotification/app/src/main/java/com/ptrprograms/mediasessionwithmediastylenotification/MediaPlayerService.java上学习了这个github教程
然而,每个动作都被添加到安卓 wear上的一个单独页面中。我想把其中的一些分成一页。例如,在一页上显示播放/暂停、播放前和下一页,在第二页上显示“速率”按钮。我想知道,如果不使用MediaSession,就可以通过自定义通知实现这一点,以覆盖API小于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( 安卓.R.drawable.ic_media_previous, "Previous", ACTION_PREVIOUS ) );
builder.addAction( generateAction( 安卓.R.drawable.ic_media_rew, "Rewind", ACTION_REWIND ) );
builder.addAction( action );
builder.addAction( generateAction( 安卓.R.drawable.ic_media_ff, "Fast Foward", ACTION_FAST_FORWARD ) );
builder.addAction( generateAction( 安卓.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传递一个标记时,setMediaSession出现编译错误:类型NotificationCompat中的方法SetMediaSessionCompat.token。MediaStyle不适用于参数(MediaSession.Token)。这3个动作仍然显示在安卓 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() );
}
# 1 楼答案
AppCompat v22中增加了一项功能。2.0是NotificationCompat.MediaStyle——这为您提供了一种向后兼容的方式来构建媒体通知,并将媒体信息传递给Android 5.0+设备,与MediaSessionCompat一起为旧设备上的Android Wear提供信息(以及在API14-19设备上添加锁屏控件)
当你构建一个MediaStyle通知时,调用setMediaSession()非常关键,它会告诉Android Wear你的通知被附加到媒体播放上,给你一个单卡式通知的4个动作