在我的应用程序中,我有暂停/播放操作的通知,但是,当用户点击操作时,通知栏正在关闭。如何阻止通知栏在动作点击时关闭?
创建通知的方法:
public void createNotification() {
Intent intent = new Intent(this, MainActivity.class);
PendingIntent pIntent = PendingIntent.getActivity(this, (int) System.currentTimeMillis(), intent, 0);
Intent intent2 = new Intent(this, IntentActivity.class);
intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
pIntent2 = PendingIntent.getActivity(this, (int) System.currentTimeMillis(), intent2, 0);
builder = new NotificationCompat.Builder(context);
Notification noti = builder
.setAutoCancel(true)
.setContentTitle("Title")
.setSmallIcon(R.drawable.ic_launcher)
.setContentIntent(pIntent)
.setPriority(Notification.PRIORITY_MAX)
.setStyle(new NotificationCompat.BigTextStyle().bigText("Czas trwania: " + time + "\nKalorie: 4kcal"))
.addAction(icon, actionString, pIntent2).build();
notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notificationManager.notify(0, noti);
}
答案 0 :(得分:2)
从
更改您的代码setAutoCancel(true)
到
setAutoCancel(false)
答案 1 :(得分:0)
在按NotificationBuilder
构建通知时,您可以使用builder.setAutoCancel(false);
。
答案 2 :(得分:0)
我解决了类似的问题。
对于每个使用的通知动作,PendingIntent。看来,如果您从PendingIntent.getActivity(...)创建PendingIntent,则会关闭通知。如果您是从PendingIntent.getService(...)或PendingIntent.getBroadcast(...)创建的,则会保留通知。
因此,如果您想从通知中开始活动并且不隐藏通知:将意向发送给服务或发送广播,然后从那里开始活动。
但是从那里开始出现了另一个问题:已启动的活动显示在通知下方,我不知道如何将其置于顶部。
答案 3 :(得分:0)
我参加聚会有点晚,但这可能会帮助其他面对这个话题的人。
正如Anrimian指出的那样,通过getActivity(Context, int, Intent, int)
构建PendingIntent的操作在单击操作后会关闭通知面板,据我所知,您对此无能为力,就是这样。
但是使用PendingIntent
或getBroadcast(Context, int, Intent, int)
构建getService(Context, int, Intent, int)
可以满足您的需求。
因此,假设您按照以下方式构建了PendingIntent
:
val playIntent = Intent("ACTION_PLAY_INTENT")
val requestCode = 1
val playPendingIntent = PendingIntent.getBroadcast(context, requestCode, playIntent, PendingIntent.FLAG_UPDATE_CURRENT)
然后,您需要使用以下命令将PendingIntent
添加到NotificationCompat.Builder
:
.addAction(icon, actionString, playPendingIntent)
在您的活动中,您可以这样声明接收者:
private val playBroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
// parse your actions here...
}
}
最后,您可以通过以下方式注册:
registerReceiver(playBroadcastReceiver, IntentFilter("ACTION_PLAY_INTENT"))
结果是您在不关闭通知面板的情况下执行了操作。 我也用RemoteViews测试了这种方法,效果很好。