Android 我需要在不影响前台服务的情况下删除通知

Android 我需要在不影响前台服务的情况下删除通知,android,notifications,Android,Notifications,我需要删除通知。在不影响应用程序前台服务的情况下。提前感谢 Notification note = new Notification(R.drawable.ic_blank,"",System.currentTimeMillis()); Intent i=new Intent(this, MyLocationListener.class); i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);

我需要删除通知。在不影响应用程序前台服务的情况下。提前感谢

 Notification note = new Notification(R.drawable.ic_blank,"",System.currentTimeMillis());
 Intent i=new Intent(this, MyLocationListener.class);
 i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
 PendingIntent pi=PendingIntent.getActivity(this, 0,i, 0);
 note.setLatestEventInfo(this, "","", pi);
 note.flags |= Notification.FLAG_NO_CLEAR;
 startForeground(42, note); 

Android操作系统不喜欢你这样做,因为用户有权知道你在他们的设备上运行前台服务。 但如果必须删除前台服务通知: 要在前台服务仍在运行时删除通知区域(状态栏)中的通知图标,请执行以下操作: 只需在通知生成器中将优先级设置为最小值(-2):

 .setSmallIcon(R.drawable.ic_launcher)
 .setContentTitle("Service Started")
 .setTicker("Music Playing")
 .setWhen(System.currentTimeMillis());
例如:

/* (Notification.PRIORITY_MIN) will remove the notification in statusbar */ 
builder.setPriority(Notification.PRIORITY_MIN)     
 .setSmallIcon(R.drawable.ic_launcher)
 .setContentTitle("Service Started")
 .setTicker("Music Playing")
 .setWhen(System.currentTimeMillis());
这将仅删除通知区域中的小通知图标

如果还需要删除通知抽屉中的详细信息通知矩形:

那么您需要做的事情就更复杂了: 您需要以前台身份启动服务,然后启动另一个前台服务,该服务的通知ID与原始服务中的相同。 然后关闭(stopself())新的前台服务,Android系统将删除通知(而之前启动的原始服务将保留在前台而不显示通知)

这在5.1.1中运行良好,我不知道android团队是否已经关闭了棉花糖的漏洞

顺便说一句:

  • 为此,还有一种非编程方式: 进入设置->应用程序->应用程序管理器找到您的应用程序并按下。 您将进入您的应用程序信息。 禁用应用程序信息中的“显示通知”选项。 这将删除应用程序的所有通知,但也会禁用toast消息。。 我不认为有一种方法可以从应用程序内部以编程方式禁用设置中的此选项-我认为android出于安全原因阻止了它。如果有人知道如何以编程方式更改此设置,请告诉

  • 如果在尝试避免抽屉中的通知详细信息矩形时,您将删除通知生成器中的以下行:

     .setSmallIcon(R.drawable.ic_launcher)
     .setContentTitle("Service Started")
     .setTicker("Music Playing")
     .setWhen(System.currentTimeMillis());
    
    然后,Android系统将继续显示一个关于您的服务的通知矩形(标题为“此服务正在运行,触摸以获取更多信息或停止服务”),按下此矩形将引导用户在设置->应用程序->应用程序管理器上找到您的应用程序信息,并选择“强制停止”这项服务。 关于这一点,你可以在这里阅读更多


  • 希望有帮助:-)

    添加此行生成器。setPriority(Notification.PRIORITY_MIN)将从状态栏和锁定屏幕中删除通知图标


    同时删除或注释builder.setSmallIcon(R.drawable.ic_launcher)会删除通知图标,即使在设备解锁时向下滚动通知,但我不确定它在android中如何工作N

    您所说的“不影响应用程序的前台服务”是什么意思?启动时,startforeground方法与通知一起使用。如果删除我的通知,则不会影响应用程序进入前台。最后发现,如果没有通知,前台服务将无法启动:(Android 7.1中修复了使用第二个服务删除通知的技巧的可能副本。+1建议用户禁用“显示通知”对于操作系统设置中的应用程序。我已经测试了该方法,并确认它可以从Android 4.1到Android 7.1运行。我相信没有看到通知的图标已经修复了一段时间。是的,它会修复,但如果你向下滚动状态栏,你可能会发现与你的应用程序相关的通知。但这肯定是隐藏通知的最简单方法n icon..Oops,抱歉,我的意思是键入“不设置通知图标。是的,将通知优先级设置为
    priority\u MIN
    是从状态栏隐藏通知图标的好方法。关于不设置通知图标(您回答中关于删除
    setSmallIcon()的部分)
    ,从Android 4.3开始,这项功能不再有效。