如何防止通知栏在通知操作单击时关闭

问题描述 投票:1回答:4

在我的应用程序中,我有暂停/播放操作的通知,但是,当用户单击该操作时,通知栏正在关闭。如何阻止通知栏关闭动作点击?

创建通知的方法:

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);
    }
android notifications android-notifications
4个回答
2
投票

改变你的代码

setAutoCancel(true)

setAutoCancel(false)

0
投票

在通过NotificationBuilder建立通知时,您可以使用builder.setAutoCancel(false);


0
投票

我解决了类似的问题。

对于使用PendingIntent的每个通知操作。看来如果你从PendingIntent.getActivity(...)创建PendingIntent - 它会关闭通知。如果您从PendingIntent.getService(...)或PendingIntent.getBroadcast(...)创建 - 通知仍然存在。

因此,如果您想从通知中启动活动而不隐藏通知:向服务发送意图或发送广播,则从那里开始活动。

但是从那里开始另一个问题:在通知下启动活动显示,我不知道如何将它带到顶部。


0
投票

我有点迟到了,但它可能会帮助其他人面对这个话题。

正如Anrimian指出的那样,通过PendingIntent建立getActivity(Context, int, Intent, int)会在动作点击时关闭通知面板,据我所知,你可以做的事情并不多,它只是它的工作原理。

但是用PendingIntentgetBroadcast(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测试了这种方法,效果很好。

© www.soinside.com 2019 - 2024. All rights reserved.