代码之家  ›  专栏  ›  技术社区  ›  Mo Faizan Shaikh

Java语言lang.IllegalArgumentException:setShowActionsInCompactView:action 1超出界限(最大0)

  •  5
  • Mo Faizan Shaikh  · 技术社区  · 8 年前

    我正在为android中的一个广播应用程序构建媒体风格的通知。以下是我的通知代码:

    NotificationCompat.Action action = new android.support.v4.app.NotificationCompat.Action.Builder(imgNotificationAction, "playPause", pendingIntent).build();
        //create new notification
        NotificationCompat.Builder notificationBuilder = (NotificationCompat.Builder) new NotificationCompat.Builder(this)
                .setShowWhen(false)
                .setStyle(new NotificationCompat.MediaStyle()
                        .setMediaSession(mediaSession.getSessionToken())
                        .setShowActionsInCompactView(0, 1, 2))
                .setColor(ContextCompat.getColor(this, R.color.colorPrimary))
                //.setLargeIcon(largeIcon)
                .setSmallIcon(android.R.drawable.stat_sys_headset)
                .setContentText(radioName)
                .setContentTitle("Igala Radio presents")
                .setContentInfo("Igala language radio")
                .setContentIntent(pendingIntent)
                .addAction(action);
    
        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build());
    

    但我在Log cat中遇到以下异常:

    Caused by: java.lang.IllegalArgumentException: setShowActionsInCompactView: action 1 out of bounds (max 0)
                                                                     at android.app.Notification$MediaStyle.makeMediaContentView(Notification.java:4493)
                                                                     at android.app.Notification$MediaStyle.populateContentView(Notification.java:4427)
                                                                     at android.app.Notification$Style.buildStyled(Notification.java:3894)
                                                                     at android.app.Notification$MediaStyle.buildStyled(Notification.java:4415)
                                                                     at android.app.Notification$Builder.build(Notification.java:3638)
                                                                     at android.support.v4.app.NotificationCompatApi21$Builder.build(NotificationCompatApi21.java:132)
                                                                     at android.support.v7.app.NotificationCompat$LollipopExtender.build(NotificationCompat.java:484)
                                                                     at android.support.v4.app.NotificationCompat$NotificationCompatImplApi21.build(NotificationCompat.java:827)
                                                                     at android.support.v4.app.NotificationCompat$Builder.build(NotificationCompat.java:1744)
                                                                     at com.radio.igala.Service.PlayService.buildNotification(PlayService.java:253)
                                                                     at com.radio.igala.Service.PlayService.onStartCommand(PlayService.java:127)
                                                                     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3216)
                                                                     at android.app.ActivityThread.access$2200(ActivityThread.java:188) 
                                                                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1628) 
                                                                     at android.os.Handler.dispatchMessage(Handler.java:111) 
                                                                     at android.os.Looper.loop(Looper.java:210) 
                                                                     at android.app.ActivityThread.main(ActivityThread.java:5839) 
                                                                     at java.lang.reflect.Method.invoke(Native Method) 
                                                                     at java.lang.reflect.Method.invoke(Method.java:372) 
                                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1113) 
                                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:879) 
    

    我想知道为什么会这样 操作1超出界限(最大值0) . 这是否意味着我不能在其中添加任何操作?

    1 回复  |  直到 8 年前
        1
  •  5
  •   guipivoto SadeghAlavizadeh    8 年前

    我认为发生错误是因为您正在定义操作( addAction() )之后 setShowActionsInCompactView() .

    这样,你就可以 setShowActionsInCompactView 什么时候 notificationBuilder 尚未执行任何操作。换句话说,它的内部数组有0个元素(最大值为0)

    你能试试这样的方法吗:

    NotificationCompat.Builder notificationBuilder = (NotificationCompat.Builder) new NotificationCompat.Builder(this)
            .addAction(action)
            ...
            .setStyle(new NotificationCompat.MediaStyle()
                    .setMediaSession(mediaSession.getSessionToken())
                    .setShowActionsInCompactView(0, 1, 2))
            ....;
    

    编辑

    我发现的另一个错误是:

    您只创建一个操作:

    NotificationCompat.Action action = new android.support.v4.app.NotificationCompat.Action.Builder(imgNotificationAction, "playPause", pendingIntent).build();
    

    但在这里,您要设置3个操作:

    .setShowActionsInCompactView(0, 1, 2))
    

    操作数 设置ShowActionsInCompactView() 应与通过添加的操作数相匹配 addAction() .

    您可以添加更多操作(创建新操作并调用 addAction() 再次或仅向发送一个参数 设置ShowActionsInCompactView()