【问题标题】:How disable close notification panel after click on own notification单击自己的通知后如何禁用关闭通知面板
【发布时间】:2014-09-25 06:24:31
【问题描述】:

如何在用户单击我的通知(在正文上,而不是操作按钮上)后禁用关闭通知面板?

我使用notificationBuilder.setOngoing(true)notificationBuilder.setAutoCancel( false),但面板继续关闭。我做错了什么?

补充:我也用这个代码:

  Intent intentNotification intentNotification = new Intent( contextApplication, MyBroadcast.class);
  intentNotification.putExtra( "reload", "1");
  PendingIntent pendingIntent = PendingIntent.getBroadcast( contextApplication, 0, intentNotification, PendingIntent.FLAG_UPDATE_CURRENT);
  notificationBuilder.setContentIntent( pendingIntent);

  notificationBuilder.setAutoCancel( false); // this not work because setContentIntent work

如果我删除此代码通知面板,则屏幕上会继续显示。当我添加此代码面板时隐藏。但是我需要通过单击通知正文来创建对 MyBroadcast 的调用。有什么方法可以通过点击通知正文来调用我的广播?

Add2:在@NIPHIN 的回答中,我尝试在我的广播接收器中恢复导航面板:

if( android.os.Build.VERSION.SDK_INT <= 16)  Class.forName( "android.app.StatusBarManager").getMethod( "expand").invoke( contextApplication.getSystemService( "statusbar"));
 else  Class.forName( "android.app.StatusBarManager").getMethod( "expandNotificationsPanel").invoke( contextApplication.getSystemService( "statusbar"));
// manifest need <uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/>

这项工作正确,但不清楚:面板首先关闭并在片刻(秒)后恢复。

有什么方法可以禁用关闭面板?

【问题讨论】:

标签: java android notifications


【解决方案1】:

使用notificationBuilder.setAutoCancel(false)

关闭状态栏使用这个

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

根据这个答案Close status bar when button notification is clicked

【讨论】:

  • 我需要保护面板不被关闭。我添加了上述有问题的信息
  • addAction 需要按钮在我的通知底部,但如果我的通知不在列表中的第一个按钮隐藏(通过在通知上向下滑动显示)。我点击通知将关闭面板。
  • 我尝试将您的代码用于恢复面板。工作正确。但需要任何方式来禁用关闭面板
【解决方案2】:

我不认为你能做到这一点。如果看到 Notification click 的 AOSP 代码,紧接着 点击在 ClickHandler 中处理,Panel 正在关闭

以下代码来自 BaseStatusBar.java

       try {
            mBarService.onNotificationClick(mPkg, mTag, mId);
        } catch (RemoteException ex) {
        }

        // close the shade if it was open
        animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE);

【讨论】:

  • 这是可能的,因为谷歌音乐应用能够做到这一点! i.stack.imgur.com/B5qh7.jpg
  • @PedroD 对于音乐应用,它不是被点击的通知,而是远程视图。问题是针对整个通知的
【解决方案3】:

在构建器中使用以下代码:-

setAutoCancel(false)

【讨论】:

【解决方案4】:
    nm.cancel(uniqueID);

nm 是 NotoficationManager 的对象

【讨论】:

  • 我需要禁用关闭通知,但您需要启用并执行关闭通知。
猜你喜欢
  • 2013-03-12
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
  • 2015-11-09
  • 2018-05-26
  • 1970-01-01
  • 2018-04-19
  • 1970-01-01
相关资源
最近更新 更多