Android java.lang.IllegalArgumentException:setShowActionsInCompactView:action 1超出范围(最大值为0)
我正在为android中的一个广播应用程序构建媒体风格的通知。以下是我的通知代码:Android java.lang.IllegalArgumentException:setShowActionsInCompactView:action 1超出范围(最大值为0),android,media-player,android-notifications,illegalstateexception,Android,Media Player,Android Notifications,Illegalstateexception,我正在为android中的一个广播应用程序构建媒体风格的通知。以下是我的通知代码: NotificationCompat.Action action = new android.support.v4.app.NotificationCompat.Action.Builder(imgNotificationAction, "playPause", pendingIntent).build(); //create new notification NotificationCompat
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)。这是否意味着我不能在其中添加任何操作?我认为发生错误是因为您在
设置ShowActionsInCompactView()
之后定义了操作(addAction()
)
这样,当notificationBuilder
尚未执行任何操作时,您将尝试在CompactView
中设置ShowActions。换句话说,它的内部数组有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))
操作数setShowActionsInCompactView()
应与您通过addAction()
添加的操作数相匹配
您可以添加更多操作(创建新操作并再次调用
addAction()
,或者只向setShowActionsInCompactView()发送一个参数)
完全按照你说的做了。仍然是相同的例外:|@MoFaizanShaikh我更新了我的答案。请你再检查一下好吗?哦,但我只想添加一个操作。我该怎么办?使用.setShowActionsInCompactView(0)而不是.setShowActionsInCompactView(0,1,2)谢谢你完成了这项工作:)。现在,出现了另一个问题:|。当我在应用程序中启动音乐时,它会显示通知,但当我暂停通知中的音乐,然后再次播放时,通知就会消失