React Native 通知触发通知在锁定屏幕中不起作用

bq9c1y66  于 2023-06-06  发布在  React
关注(0)|答案(1)|浏览(171)

我正试图实现Notifee触发器与React Native应用程序与此插件@notifee/react-native。我成功的是得到通知时,应用程序正在运行(在前台),但我想做的是得到本地通知时,设备被锁定(在锁定的设备通知来与延迟4-5分钟)
这是我的代码--

async function scheduleNotification() {
  
    const notificationDate = new Date(date);
    const notificationTime = new Date(time);

    const notificationTimestamp = notificationDate.setHours(
      notificationTime.getHours(),
      notificationTime.getMinutes(),
      0,
      0,
    );

    await notifee.createChannel({
      id: 'default',
      name: 'Default Channel',
      importance: AndroidImportance.HIGH,
    });

    // Create a time-based trigger
    const trigger = {
      type: TriggerType.TIMESTAMP,
      timestamp: notificationTimestamp,
      importance: AndroidImportance.HIGH,
      visibility: AndroidVisibility.PUBLIC,
    };

    await notifee.createTriggerNotification(
      {
        title: title,
        body: desciption,
        android: {
          channelId: 'default',
          actions: [snoozeAction, dismissAction],
          category: AndroidCategory.CALL,
          // importance: AndroidImportance.HIGH,
          fullScreenAction: {
            id: 'default',
            launchActivity: 'com.myapp.CustomActivity',
          },
          importance: AndroidImportance.HIGH,
          visibility: AndroidVisibility.PUBLIC,
          vibration: true,
          loopSound: true,
          sound: 'Default',
          timeoutAfter: 6000,
          vibrationPattern: [300, 500],
        },
      },
      trigger,
    );
}
scyqe7ek

scyqe7ek1#

默认情况下,Android通知触发器将使用WorkManager API。将此API用于通知并不保证通知的确切时间,因此如果您的应用程序通知对时间敏感,则需要使用AlarmManager API。Notifee将TimestampTrigger上的alarmManager属性默认为false,这会导致通知使用更少的电池电量(使用WorkManager API),但不会提供确切的通知时间。
如果您的通知对时间敏感,需要精确的时间,请更改代码以使用alarmManager,如下所示:

const trigger = {
  type: TriggerType.TIMESTAMP,
  timestamp: notificationTimestamp,
  importance: AndroidImportance.HIGH,
  visibility: AndroidVisibility.PUBLIC,
  alarmManager: {
     allowWhileIdle: true,
  },
};

请注意,您的代码可能只需要设置alarmManager: true,在这种情况下,您可以省略allowWhileIdle属性。allowWhileIdle选项是AlarmManager API的特定配置。如果设置为true,则允许您的应用唤醒设备以便执行任务,即使设备处于低电耗模式也是如此。根据您的需求进行调整。
最后,我不知道你用什么软件包来要求你的用户通知权限。确保您向用户请求alarm权限,以便使用AlarmManager功能。
希望这能解决你的问题!

相关问题