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

时间:2015-06-24 06:22:23

标签: android statusbar android-statusbar system-services

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

我发现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 bar服务或任何其他替代方案?

更新

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

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

调用此意图将自动关闭通知

1 个答案:

答案 0 :(得分:0)

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

您可以尝试以下方法:

  1. 通过将待处理的意图传递到其中来创建一些通知。
  2. 使用share as action创建待处理的意图。 现在您可以使用共享选项。
  3. @Amanda Fernandez你可以尝试上面的方法