我需要删除通知而不影响前台服务

时间:2014-04-05 08:15:09

标签: 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);
 PendingIntent pi=PendingIntent.getActivity(this, 0,i, 0);
 note.setLatestEventInfo(this, "","", pi);
 note.flags |= Notification.FLAG_NO_CLEAR;
 startForeground(42, note); 

2 个答案:

答案 0 :(得分:2)

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

例如:

/* (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团队是否已经在棉花糖中关闭了这个漏洞。

顺便说一句:

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

  2. 如果在尝试避开抽屉中的通知详细信息矩形时,您将在通知构建器中删除这些行:

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

    然后Android系统将继续显示有关您服务的通知矩形(标题为“此服务正在运行,触摸以获取更多信息或停止服务”)并按下此矩形将引导用户访问您的应用程序信息设置 - >应用程序 - >应用程序管理器,可选择“强制停止”此服务。 关于这一点,你可以在这里阅读更多https://plus.google.com/105051985738280261832/posts/MTinJWdNL8t

  3. 希望它有所帮助: - )

答案 1 :(得分:0)

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

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