如何在单击自己的通知后禁用关闭通知面板

时间:2014-09-25 06:24:32

标签: java android notifications

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

我使用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上回答我尝试在broadcastreceiver中恢复natification面板:

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"/>

这项工作正确,但不清楚:面板首先关闭,几分钟后(秒)恢复。

禁用关闭面板的任何方式?

4 个答案:

答案 0 :(得分:3)

我认为你不能这样做。如果您看到通知的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);

答案 1 :(得分:2)

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

setAutoCancel(false)

答案 2 :(得分:2)

使用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

答案 3 :(得分:-1)

    nm.cancel(uniqueID);

其中nm是NotoficationManager的对象