有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用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) 个答案

  1. # 1 楼答案

    AppCompat v22中增加了一项功能。2.0是NotificationCompat.MediaStyle——这为您提供了一种向后兼容的方式来构建媒体通知,并将媒体信息传递给Android 5.0+设备,与MediaSessionCompat一起为旧设备上的Android Wear提供信息(以及在API14-19设备上添加锁屏控件)

    当你构建一个MediaStyle通知时,调用setMediaSession()非常关键,它会告诉Android Wear你的通知被附加到媒体播放上,给你一个单卡式通知的4个动作