React Native-Expo-Local Schedule Notification在Android上一次抛出多个通知而不是单个

时间:2019-04-08 07:19:14

标签: react-native notifications react-native-android expo

我正在尝试每小时创建一次具有通知功能的水提醒应用程序。 我已经使用scheduleLocalNotificationAsync实现了通知。我的实现可以在IOS上正常运行,但是在Android中,当我打开该应用程序时,该应用程序同时发送12条通知,而不是在计划的时间一一发送。

componentDidMount = () => {
  this._sendNotifications();
};

_sendNotifications = async () => {
  // Not to create duplicated notifications first cancel all notifications
  await Notifications.cancelAllScheduledNotificationsAsync();

// beginning of notification part
const localnotification = {
  title: 'Water Reminder',
  body: "Don't forget to drink water!",
  android: {
    sound: true,
  },
  ios: {
    sound: true,
  },
};

// get the current date
let currentDate = Date.now();
currentDate = new Date(currentDate);

// get the day, month and year from current date to create time to schedule
let year = currentDate.getFullYear();
let month = currentDate.getMonth();
let date = currentDate.getDate();

// then create unix epoch number for eact date with number from notification section
// then we call notification function with each timestamp (not1)
if (this.state.switchStatus === false) {
  await Notifications.cancelAllScheduledNotificationsAsync();
} else {
  // Notification for nine
  if (this.state.otherSwitchStatus.nine === true) {
    let not0 = new Date(year, month, date, 9);
    not0 = Date.parse(not0);
    const schedulingOptions0 = { time: not0, repeat: 'day' };
    // call the function to send notification at 9:00
    await Notifications.scheduleLocalNotificationAsync(localnotification, schedulingOptions0);
  }

  // Notification for ten
  if (this.state.otherSwitchStatus.ten === true) {
    let not1 = new Date(year, month, date, 10);
    not1 = Date.parse(not1);
    const schedulingOptions1 = { time: not1, repeat: 'day' };
    // call the function to send notification at 10:00
    await Notifications.scheduleLocalNotificationAsync(localnotification, schedulingOptions1);
  }
}

1 个答案:

答案 0 :(得分:0)

我想我了解代码的含义。

因为您可以在代码中看到,所以与一天中的当前时间无关,所以我将调用scheduleLocalNotificationAsync 15次(从09:00开始至23:00,具有每日重复选项)。但是,当我在12:40打开“通知”屏幕时,我会立即收到4条通知(每个09:00、10:00、11:00和12:00一条)。

我猜想expo会立即调用通知函数4次。对于ios并非如此,但这是在Android中发生的。我猜它需要在博览会方面修复。

在此之前,我通过检查当前时间并将其与计划的时间进行比较来解决该问题,如果已过,则将其安排在明天。

.as-console-wrapper { max-height: 100% !important; top: 0; }

我还创建了一个博览会github。 https://github.com/expo/expo/issues/3946