单击按钮通知时关闭状态栏

Posted

技术标签:

【中文标题】单击按钮通知时关闭状态栏【英文标题】:Close status bar when button notification is clicked 【发布时间】:2013-10-26 08:57:59 【问题描述】:

点击通知按钮后如何关闭状态栏?

我试过this,但我有一个例外:

java.lang.NoSuchMethodException: collapse []
   at java.lang.Class.getConstructorOrMethod(Class.java:460)
   at java.lang.Class.getMethod(Class.java:915)
   ...

我的代码:

NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
    .setSmallIcon(R.drawable.icon)
    .setContentTitle("Sync Failed")
    .setContentText("Lorem ipsum dolor sit amet")
    .setStyle(new NotificationCompat.BigTextStyle().bigText("Lorem ipsum dolor sit amet"))
    .addAction(R.drawable.change, "Change Pass", pChangePass)
    .addAction(R.drawable.remove, "Ignore", pIgnore)
    .setAutoCancel(false);
mNotificationManager.notify(accountUnique, builder.build());

在 NotificationIntent 类中

@Override
public void onReceive(Context context, Intent intent) 
    int notificationID = intent.getExtras().getInt("NOT_ID");
    this.callbackContext = StatusBarNotification.getCallback();
    this.mNotificationManager = StatusBarNotification.getNotificationManager();

    this.mNotificationManager.cancel(notificationID);
    this.callbackContext.success(returnJSON(intent));

【问题讨论】:

【参考方案1】:

以下解决方案应该更简单,并且不使用非公共 API:

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

【讨论】:

你能告诉在哪里使用它,在 onRecieve 或 action intent 中吗? 像魅力一样工作!谢谢。只需在 onRecieve 中添加 2 行代码即可。【参考方案2】:

好的,我解决了。

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();

【讨论】:

您真的应该接受 Sam Lu 的评论 - 您的解决方案可能会停止在任何下一个版本上运行,因为它使用非公共 api。如您所见,您已经必须添加 if api&lt;=16 - 很快您可能需要添加 if api&lt;=19 同意以上评论。 Sam 的回答要简单得多,不涉及版本号。

以上是关于单击按钮通知时关闭状态栏的主要内容,如果未能解决你的问题,请参考以下文章

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

单击按钮时更改状态栏颜色 - iOS

通知栏上的事件,如状态栏 android

android状态栏通知图标

即使在键盘关闭时也保持搜索栏取消按钮的颜色

当用户在菜单外单击时,如何关闭 Bootstrap 导航栏下拉菜单?