当前位置: 首页 > 知识库问答 >
问题:

点击自己的通知后如何禁用关闭通知面板

宗晟
2023-03-14

如何在用户点击我的通知后禁用关闭通知的面板(在主体上,而不是操作按钮上)?

我使用notificationBuilder。设置正在进行(true)通知生成器。setAutoCancel(错误)但面板继续关闭。我做错了什么?

补充:我也使用以下代码:

  Intent intentNotification intentNotification = new Intent( contextApplication, MyBroadcast.class);
  intentNotification.putExtra( "reload", "1");
  PendingIntent pendingIntent = PendingIntent.getBroadcast( contextApplication, 0, intentNotification, PendingIntent.FLAG_UPDATE_CURRENT);
  notificationBuilder.setContentIntent( pendingIntent);

  notificationBuilder.setAutoCancel( false); // this not work because setContentIntent work

如果我删除此代码,通知面板将保持在屏幕上显示。当我添加此代码面板时隐藏。但我需要通过点击通知体创建对MyBroadcast的调用。有没有办法通过点击通知体来呼叫我的广播?

地址2:在@NIPHIN answer上,我尝试在我的广播接收器内恢复原生化面板:

if( android.os.Build.VERSION.SDK_INT <= 16)  Class.forName( "android.app.StatusBarManager").getMethod( "expand").invoke( contextApplication.getSystemService( "statusbar"));
 else  Class.forName( "android.app.StatusBarManager").getMethod( "expandNotificationsPanel").invoke( contextApplication.getSystemService( "statusbar"));
// manifest need <uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/>

这项工作是正确的,但不清楚:面板首先关闭,几分钟(秒)后恢复。

有办法禁用关闭面板吗?

共有3个答案

孔弘盛
2023-03-14

在builder中使用以下代码:-

setAutoSubel(false)

龚沛
2023-03-14

我认为你不能这样做。如果您看到通知单击的AOSP代码,在ClickHandler中处理单击后,面板将立即关闭

下面的代码来自BaseStatusBar.java

       try {
            mBarService.onNotificationClick(mPkg, mTag, mId);
        } catch (RemoteException ex) {
        }

        // close the shade if it was open
        animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE);
盖和泰
2023-03-14

使用通知Builder.set自动取消(false)

要关闭状态栏,请使用此

private int currentApiVersion = android.os.Build.VERSION.SDK_INT;
Object sbservice = context.getSystemService("statusbar");

try {
    Class<?> statusbarManager = Class.forName("android.app.StatusBarManager");
    if (currentApiVersion <= 16) {
        Method collapse = statusbarManager.getMethod("collapse");
        collapse.invoke(sbservice);
    } else {
        Method collapse2 = statusbarManager.getMethod("collapsePanels");
        collapse2.invoke(sbservice);
    }
} catch (Exception e) {
    e.printStackTrace();
}

根据此答案,单击按钮通知时关闭状态栏

 类似资料:
  • 我浏览了Stackoverflow,发现有人问了这个问题,但我没有找到任何解决方案。 我有一个带有两个按钮的自定义通知。我想在按下通知按钮后关闭状态栏面板,但不知道如何关闭。如果我按下通知本身(也就是contentIntent),面板就会关闭,这也是我想要的按钮。 这是我的通知代码:

  • 我的通知包含几个按钮: 1个按钮启动主活动(执行此操作时应关闭状态栏) 其中4人发送待定意图以控制音乐(应保持状态栏打开) 问题是,第一个按钮没有关闭状态栏。。。 第一个按钮发送的Pending帐篷: 活动已正确启动,但状态栏仍在那里,不会自行关闭<我是不是错过了一面旗帜?我可以通过MyActivity程序关闭状态栏吗。onResume() 编辑:顺便说一下,通知是由服务推送的 感谢=)

  • 第二个尝试是使用Firebase云消息传递,但据我所知,这种机制只允许发送通知。但如何以编程方式处理事件并创建通知?请给我一个例子或一种方法与FCM或一个更优雅的解决方案,如果它帮助我完成任务。

  • 由于API级别为16(Jelly Bean),因此可以使用 但是当我向通知添加一个操作并且按下该操作时,通知不会被取消。当单击通知本身时,可以通过以下方式取消通知 或 但显然,这与通知相关联的操作无关。 有什么提示吗?或者这还不是API的一部分?我什么也没找到。

  • 我知道这个问题似乎重复,但为了我的要求,我已经在网上搜索了很多帖子,但没有一个对我有效。 我的要求 为此,我尝试了以下场景 情景1 使用将通知数据从传输到Launcher/Main活动,并根据bundle数据重定向到特定活动/片段 情景3 通过使用 按照上面的场景,当应用程序打开时,一切工作都很好,但如果我的应用程序关闭了,则意味着它总是重定向到main/launcher活动