如何以编程方式关闭通知托盘

Posted

技术标签:

【中文标题】如何以编程方式关闭通知托盘【英文标题】:How to Programmatically close the notification tray 【发布时间】:2015-09-10 05:06:54 【问题描述】:

我想分享 G​​CM 通知项。共享按钮响应点击事件并且项目也被共享。这里唯一的问题是,通知托盘下方存在意图选择器对话框。用户必须手动关闭状态栏,然后选择要共享的应用程序。我想以编程方式关闭状态栏,这样当用户单击共享时,它会直接向他显示选择应用程序的对话框。

我发现status bar服务可以用来打开/关闭服务。但它仅限于系统应用程序。

private void closeNotificationTray() 
        Object service = mContext.getSystemService(Context.STATUS_BAR_SERVICE);
        Method collapse;
        try 
            Class<?> statusBarMngr = Class.forName("android.app.StatusBarManager");
            if (Build.VERSION.SDK_INT >= 17)
                collapse = statusBarMngr.getMethod("collapsePanels");
            else
                collapse = statusBarMngr.getMethod("collapse");
            collapse.invoke(service);
         catch (ClassNotFoundException e) 
            e.printStackTrace();
         catch (NoSuchMethodException e) 
            e.printStackTrace();
         catch (InvocationTargetException e) 
            e.printStackTrace();
         catch (IllegalAccessException e) 
            e.printStackTrace();
        

我使用了上面的代码。但我收到“STATUS_BAR_SERVICE 无法解决”错误。当我在清单中添加以下权限时:

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

我得到了,只允许用于系统应用程序。它不允许我在我的应用程序中使用。有什么方法可以使用status barservice 或任何其他替代方法吗?

更新:

我只用了 2 行代码就解决了上述问题。无需调用 STATUS_BAR_SERVICE。

Intent it = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
    mContext.sendBroadcast(it);

调用这个intent会自动关闭通知

【问题讨论】:

我解决了这个问题。请检查解决方案的更新 你不能依赖你的更新。当有一个实际的系统级对话框打开时会发生什么?我打开了一个系统级对话框,然后它关闭了它。 【参考方案1】:

是的,此权限“android.permission.STATUS_BAR”仅适用于系统应用,不适用于第三方应用。

你可以试试下面的方法:

    通过将待处理的意图传递给它来创建一些通知。 使用共享作为操作创建待定意图。 现在您可以使用共享选项了。

@Amanda Fernandez 你可以试试上面的方法吗

【讨论】:

如果我将 FLAG_CANCEL_CURRENT 标志设置为等待 itnet 的共享按钮,它将从托盘中清除该项目。我希望它留在托盘中,只有当用户选择它时才应该清除它。

以上是关于如何以编程方式关闭通知托盘的主要内容,如果未能解决你的问题,请参考以下文章

应用程序运行时如何在android中以编程方式关闭通知?

当app运行时,如何在android中以编程方式关闭通知?

在 Android 上以编程方式关闭应用程序的通知

iOS:以编程方式关闭锁定屏幕上显示的通知?

如何在没有任何按钮的情况下以编程方式关闭 UIAlertController?

vc 如何实现关闭时最小化到托盘