17

我有一个通知,我正在尝试通过重复使用相同的通知生成器来更新,但是没有办法清除按钮,你只能调用addAction. 不使用相同的 Builder 会导致通知闪烁,这是不可取的。有什么解决办法吗?我正在使用NotificationCompatv4 支持库。

4

3 回答 3

6
notificationBuilder.mActions.clear();

它实际上是public ArrayList<Action>,所以你可以用它做任何你想做的事情。

于 2015-06-22T14:43:10.393 回答
2

您有两种选择来实现这一目标:

  1. 使用自定义布局(如果需要,只需复制本机通知的设计),然后在 RemoteView 中使用它,并使视图可见或隐藏它们。例如remoteView.setViewVisibility(...)...或更改按钮的文本...
  2. 使用反射来清除构建器的操作。会像下面这样工作:

    try {
        //Use reflection to remove all old actions
        Field f = mNotificationBuilder.getClass().getDeclaredField("mActions");
        f.setAccessible(true);
        f.set(mNotificationBuilder, new ArrayList<>());
    } 
    catch (NoSuchFieldException e) {} 
    catch (IllegalAccessException e) {}
    
于 2015-04-23T07:48:37.897 回答
0

从 API 24 开始,您可以使用方法setActions()和更新图标、文本和待处理的意图。

Notification.Action.Builder builder = new Notification.Action.Builder( Icon.createWithResource( this, R.drawable.ic_pause) , getString( R.string.pause ), PendingIntent.getBroadcast( this, 1, new Intent( TIMER_PAUSE ), 0 ) );
Notification.Action action = builder.build();
...
notification_builder.setActions( action );
Notification notification = notification_builder.build();
NotificationManager nm = (NotificationManager) getSystemService( Context.NOTIFICATION_SERVICE );
nm.notify( 1, notification );
于 2021-11-26T08:58:37.927 回答