【问题标题】:java.lang.IllegalArgumentException: setShowActionsInCompactView: action 1 out of bounds (max 0)java.lang.IllegalArgumentException:setShowActionsInCompactView:动作 1 越界(最大 0)
【发布时间】:2017-12-21 20:14:51
【问题描述】:

我正在为 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)。这是否意味着我不能在其中添加任何操作?

【问题讨论】:

    标签: android media-player android-notifications illegalstateexception


    【解决方案1】:

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

    这样,当notificationBuilder 还没有任何操作时,您正在尝试setShowActionsInCompactView。也就是说,它的内部数组有0个元素(Max 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))
    

    setShowActionsInCompactView() 的操作数应与您通过 addAction() 添加的操作数相匹配。

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

    【讨论】:

    • 完全按照你说的做了。还是一样的例外:|
    • @MoFaizanShaikh 我更新了我的答案。请您仔细检查一下
    • 哦,但我只想添加一个动作。我该怎么办?
    • 使用 .setShowActionsInCompactView(0) 代替 .setShowActionsInCompactView(0, 1, 2)
    • 谢谢你的工作:)。现在,出现了另一个问题:|。当我在应用程序中启动音乐时,它会显示通知,但是当我从通知中暂停音乐然后再次播放时,通知就会消失
    猜你喜欢
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多