android - 世博会:如果应用程序在前台打开,则不显示通知

标签 android react-native expo

我正在使用 Expo 开发一个 react 原生的消息传递应用程序。每次用户收到一条新消息时,我都会从我的服务器发送一条通知。

如果应用当前打开,有什么方法可以不显示通知?

现在我在收到通知后立即使用它:

Notifications.dismissNotificationAsync(notification.notificationId);

但是有 0.5 秒的延迟,通知有时间出现在托盘中并在被关闭之前触发声音。我不想显示它。

最佳答案

在应用程序运行时收到通知时,使用setNotificationHandler,您可以设置一个回调来决定是否应向用户显示通知。

Notifications.setNotificationHandler({
  handleNotification: async () => ({
    shouldShowAlert: true,
    shouldPlaySound: false,
    shouldSetBadge: false,
  }),
});

当收到通知时,handleNotification 被调用,传入的通知作为参数。该函数应在 3 秒内响应一个行为对象,否则通知将被丢弃。如果通知处理成功,将使用通知的标识符调用 handleSuccess,否则(或超时)将调用 handleError

未设置处理程序或未及时响应时的默认行为是不显示通知。

如果您不使用 setNotificaitonHandler,当应用程序处于前台时将不会显示新通知。

因此,您可以在应用初始化时简单地将 setNotificationHandler 设置为 null


Notifications.setNotificationHandler(null);

See Documentaition

关于android - 世博会:如果应用程序在前台打开,则不显示通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56689701/

相关文章:

video - 如何在展会上使用imagepicker挑选视频?

javascript - VSCode如何禁用/删除 "react/cjs/react.development"自动完成

ios - 一种检测有人关闭应用程序的方法

android - TextInputLayout 标签干扰输入的文本

android - GLSurfaceView 渲染器,如何强制重新创建表面?

java - glEnableVertexAttribArray 上的 OpenGL 2.0 ES 1281 错误

react-native - Expo:弹出到裸项目仅适用于 SDK 34 及更高版本

java - 我可以执行 http GET 并使用 HttpURLConnection 包含正文吗?

gradle - 将 Gradle 与 OpenJDK 1.9 结合使用

react-native - 如何在 React Native 中从 Java 写入 console.log