用户点击我的通知后如何禁用关闭通知的面板(在正文上,而不是操作按钮)?
我使用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"/>
这项工作正确,但不清楚:面板首先关闭,几分钟后(秒)恢复。
禁用关闭面板的任何方式?
答案 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();
}
答案 3 :(得分:-1)
nm.cancel(uniqueID);
其中nm是NotoficationManager的对象