我已经创建了一个类,它扩展了service并作为前台服务运行。我希望我的服务通知是持久的(即不通过滑动删除)。然而,我的通知可以通过滑动而被驳回。
服务文档声明:...A前台服务必须为状态栏提供通知,状态栏放在正在进行的标题下。这意味着,除非服务被停止或从前台删除,否则不能拒绝通知.
我确实设置了断点来检查是否命中了onDestroy()或stopSelf(),但事实并非如此。服务在前台模式下运行,但我可以通过滑动来取消通知。
对于相反的情况,我发现了不少问题,在服务停止后,是不可能撤销通知的,但并没有发现与我的问题类似的问题。
服务是通过意向启动的,并按以下方式初始化:
@Override
public void onCreate()
{
super.onCreate();
initialize();
}
private void initialize()
{
Notification n = get_service_notification();
startForeground(10, n);
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter(BroadcastCodes.service_broadcast_intent_name));
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
startServing();
return START_STICKY;
}
其中startServing()订阅位置更新
通知的构建方式如下
private Notification get_service_notification()
{
Intent intent = new Intent(this, LoginActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder b = new NotificationCompat.Builder(this);
b.setAutoCancel(false)
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.drawable.app_icon)
.setTicker("some text")
.setContentTitle("some text")
.setContentText("some text")
.setContentIntent(contentIntent)
.setContentInfo("")
.setOngoing(true);
Notification res = b.build();
res.flags |= Notification.FLAG_ONGOING_EVENT | Notification.FLAG_NO_CLEAR;
return res;
}
我试过使用标志和setOngoing/setAutoCancel,但是结果保持不变。
SDK版本配置为minSdkVersion 18,targetSdkVersion 25。
我真的很感激关于这个问题的任何意见--这可能只是一个愚蠢的错误,但我已经花了超过几个小时试图研究我的own...unfortunately,但没有结果。
编辑1
我还没有解决这个问题。我决定尝试一次肮脏的攻击,但还是没有运气。
我制作了一个PendingIntent,并通过setDeleteIntent()注册了它,这个想法是在这个通知被swipe驳回后显示一个新的通知。不幸的是,我没能让它起作用(这个意图在刷卡时永远不会触发)。
我也想澄清,通知可以被刷走,但不受通知窗格中的清除按钮(垃圾图标)的影响(即不被删除)。
编辑2
如前所述,我无法使用setDeleteIntent()重新创建我的通知时,它被取消了。
现在,我解决了一个问题--我的工作是做一些定期的工作。我现在给你打电话
notificationManager.notify(10, service_notification);
当我的任务运行时,即使被滑动,我的通知也会在一段时间后被重新创建。
我仍然有一种强烈的感觉,我只是误读了文档,因为我的测试设备(Honor API23)上有几个通知是无法删除的。
编辑3
我在不同的设备上尝试过相同的代码(联想API23),并且通知按预期工作(不能被拒绝,也不能被滑动)。我的问题似乎是设备特有的。
发布于 2017-06-17 00:41:24
我做了一些进一步的测试(除了更新中提到的那些)。我试着在互联网上运行各种示例/教程,比如这一页。
在“荣誉”( Honor I)最初运行我的测试时,通知总是可以被滑动的,在联想和其他公司上,如文档中所述,“正在进行的”旗帜工程,即不能通过滑动操作而被驳回。
总之,我的问题似乎确实是设备特有的。
https://stackoverflow.com/questions/44374028
复制相似问题