我正在构建一个Android应用程序,它取代了通知抽屉并在自己的窗口中显示通知。我设法通过覆盖onNotificationPosted()
方法在我的抽屉上显示通知。但是,同样的通知也由android显示。所以,我希望只在我的窗口上显示通知,还有其他应用程序已经完成,所以这并非不可能。请告诉我如何覆盖android的默认行为。提前致谢。 :)
修改
我想要的是禁用抬头通知。那里有解决方案吗?
答案 0 :(得分:1)
咦!看起来Android无法通过代码禁用其他应用的抬头通知。
这是一个小黑客!
所以,我们需要的是,不要显示来自任何其他应用的任何抬头通知。要解决这个问题,我们需要了解一下屏幕上只能有一个抬头通知。
Hack是,在您收听任何通知后立即发送您自己的通知,即在onNotificationPosted()
子类的NotificationListener
中。
this.mNotificationManager.notify(12321, new Notification.Builder(this)
.setContentTitle("").setContentText("")
.setSmallIcon(R.drawable.transparent)
.setPriority(Notification.PRIORITY_DEFAULT)
.setFullScreenIntent(this.mBlankIntent, true)
.setAutoCancel(true)
.build());
它将用您几乎空白的通知替换第3个应用程序的通知。哇哇!等待!!这看起来很难看。
当然,现在我们需要在用户看到此消息之前删除此通知。
现在你知道了android的包名。你可以显示取消你的通知这样的事情。
if(packageName.equals("com.my.package")){
mNotificationManager.cancel(12321);
return;
}
所以,我们正在做的是在显示任何其他抬头通知时显示我们的通知,然后删除我们自己的通知。所有这些都发生得如此之快,以至于用户没有看到任何抬头通知,为此,我甚至不需要将通知存储在内存中。
答案 1 :(得分:1)
我将NotificationManager.IMPORTANCE_DEFAULT
与setPriority(NotificationCompat.PRIORITY_DEFAULT)
一起使用,它似乎可以正常工作(Oneplus 3和Note 8)。
String channelId = "ch01";
String channelName = "Status";
int importance = NotificationManager.IMPORTANCE_DEFAULT;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
NotificationChannel mChannel = new NotificationChannel(
channelId, channelName, importance);
notificationManager.createNotificationChannel(mChannel);
}
NotificationCompat.Builder nb = new NotificationCompat.Builder(this, channelId);
nb.setSmallIcon(R.drawable.ic_logo);
nb.setContentTitle(notificationText);
nb.setContentText("");
nb.setContentIntent(mainActivityPendingIntent);
nb.setPriority(NotificationCompat.PRIORITY_DEFAULT);
nb.setOnlyAlertOnce(true);
nb.setOngoing(true);
nb.setWhen(System.currentTimeMillis());
答案 2 :(得分:1)
在 Oreo及更高版本的操作系统中,它是在“通知”通道中,您必须将“优先级”设置为小于NotificationManager.IMPORTANCE_HIGH
的任何内容,或者以下类似内容阻止抬头提示。
NotificationChannel channel = new NotificationChannel(CHANNEL_ID,
CHANNEL_NAME,
NotificationManager.IMPORTANCE_DEFAULT)
在 Pre-Oreo 设备上,通知优先级本身可以帮助系统显示/隐藏抬头横幅。 还请记住,进行此更改时,您必须删除该应用程序并重新安装才能看到更改!
答案 3 :(得分:0)
将“重要度”设置为“低”,将“优先级”设置为“低”。 它对我有用
var notificationChannel = NotificationChannel(channelId, "Call" , NotificationManager.IMPORTANCE_LOW)
var notification = NotificationCompat.Builder(context,channelId)
.setContentTitle("Calling")
.setContentText("Call")
.setContentIntent(pendingIntent)
.setAutoCancel(true)
.setPriority(NotificationCompat.PRIORITY_LOW)