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

标签 android statusbar android-statusbar system-services

我想分享 G​​CM 通知项。共享按钮响应点击事件并且项目也被共享。这里唯一的问题是, 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”错误。当我在 list 中添加以下权限时:

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

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

更新:

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

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

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

最佳答案

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

您可以试试下面的方法:

  1. 通过将未决 Intent 传递给它来创建一些通知。
  2. 创建待定意向并将分享作为行动。 现在您将能够使用共享选项。

@Amanda Fernandez 你能试试上面的方法吗

关于android - 如何以编程方式关闭通知托盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31019060/

相关文章:

Android Studio - 有没有办法直接从 git/svn 添加模块而不将其存储在本地

iphone - 有没有办法阻止 UIImagePickerController 更改状态栏样式?

android - 显示弹出菜单时如何保持全屏?

android - 在 android 启动时显示进度条和加载图像

android - 当具有测试帐户的 Alpha 应用程序时,开发人员有效负载是否有效?

带有 Phonegap 的 iOS 7 状态栏

android - 当 SystemUI 在 Android Boot 中加载时

android - 显示 AlertDialog 时保持全屏

android - 透明状态栏android

android - 在不打开拨号盘的情况下调用钛合金号码