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

如何在单击通知按钮后关闭状态栏/通知面板

范翰海
2023-03-14

我浏览了Stackoverflow,发现有人问了这个问题,但我没有找到任何解决方案

我有一个带有两个按钮的自定义通知。我想在按下通知按钮后关闭状态栏面板,但不知道如何关闭。如果我按下通知本身(也就是contentIntent),面板就会关闭,这也是我想要的按钮。

这是我的通知代码:

Notification notification = new Notification(R.drawable.icon, "Service running", System.currentTimeMillis());
notification.flags |= Notification.FLAG_ONGOING_EVENT;
notification.contentIntent = openIntent;
RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.notification_layout);


contentView.setOnClickPendingIntent(R.id.button1, stopIntent);
contentView.setOnClickPendingIntent(R.id.button2, addIntent);

notification.contentView = contentView;

notificationManager.notify(NOTIFICATION_ID, notification);

共有3个答案

曹兴贤
2023-03-14

提供权限

然后:

Object statusBarService = context.getSystemService("statusbar");
Class<?> statusBarManager = Class.forName("android.app.StatusBarManager");
Method collapse = statusBarManager.getMethod("collapse");
collapse.invoke( statusBarService );

您的应用程序应该是系统应用程序,然后使用上面使用的相同权限,该方法将起作用

对于第三方应用。。这项工作不可用

/**
 * Collapse the notifications and settings panels.
 *
 * Starting in Android {@link Build.VERSION_CODES.S}, apps targeting SDK level {@link
 * Build.VERSION_CODES.S} or higher will need {@link android.Manifest.permission.STATUS_BAR}
 * permission to call this API.
 *
 * @hide
 */
@RequiresPermission(android.Manifest.permission.STATUS_BAR)
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, publicAlternatives = "This operation"
        + " is not allowed anymore, please see {@link android.content"
        + ".Intent#ACTION_CLOSE_SYSTEM_DIALOGS} for more details.")
@TestApi
public void collapsePanels() {
  ...
}

并使用Intent.ACTION_CLOSE_SYSTEM_DIALOGS

参考这个

有品
2023-03-14

好的,我找到了解决方案。它不是公共API,但它有效(目前):

Object sbservice = c.getSystemService( "statusbar" );
                    Class<?> statusbarManager = Class.forName( "android.app.StatusBarManager" );
                    Method hidesb = statusbarManager.getMethod( "collapse" );
                    hidesb.invoke( sbservice );

要想成功

<uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/>

是需要的

杜英叡
2023-03-14

使用以下两行代码折叠通知栏。

Intent it = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
context.sendBroadcast(it);
 类似资料:
  • 点击通知按钮后如何关闭状态栏? 我试过了,但有个例外: 我的代码: 在NotificationIntent类

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

  • 如何在用户点击我的通知后禁用关闭通知的面板(在主体上,而不是操作按钮上)? 我使用和但面板继续关闭。我做错了什么? 补充:我也使用以下代码: 如果我删除此代码,通知面板将保持在屏幕上显示。当我添加此代码面板时隐藏。但我需要通过点击通知体创建对MyBroadcast的调用。有没有办法通过点击通知体来呼叫我的广播? 地址2:在@NIPHIN answer上,我尝试在我的广播接收器内恢复本土化面板: 这

  • 我参考了以下链接来研究Android中通知服务的演示示例:Sai Geetha博客和Vogella教程。 这两个项目都起到了作用,但都是部分的,也就是说,我已经按原样下载并执行了这两个项目。两者都有启动通知的按钮。单击按钮时,状态栏顶部会显示通知。 问题来了,点击该通知后,既不会显示任何消息,也不会激发浏览新活动的意图。 我对这个概念还不熟悉,所以非常感谢您的帮助。。。 创建通知。班 通知接收者。

  • 我目前遇到以下问题: 我已经实现了自定义FirebaseMessagingService,并且覆盖了方法onMessageReceived()。此外,当应用程序在后台时,我从getExtras()获取捆绑包 我需要通知内容,以便在db中本地保存 发生了什么: 当应用程序处于后台时,从Firebase控制台发送3个通知 创建了3个状态栏通知 单击其中一个- 你能帮忙吗? 启动器活动代码: 自定义Fi

  • 在我的应用程序中,我有一个通知要显示。 比方说,当显示通知时,我想按“是”进入活动并隐藏通知,按“否”什么都不做只是隐藏通知。 我尝试了这段代码,但是onclick不是onclckpendingent,我不能做任何我想做的事情。 我怎么能这样做?