如何在使用Ionic、Capacitor和Angular开发的应用程序中取消一个本地通知?

2ekbmq32  于 2022-12-08  发布在  Ionic
关注(0)|答案(5)|浏览(188)

我正在开发一个应用程序使用离子,电容器和Angular 。
本项目使用电容器本地通知(https://capacitor.ionicframework.com/docs/apis/local-Notifications/
我现在如何同时取消所有的本地通知,但我只需要取消一个使用它的id但我不知道如何做到这一点。
我看过官方文件,但我不知道怎么做。有人能帮我吗?
谢谢你的好意,

6ie5vjzr

6ie5vjzr1#

我已经找到了一个解决方案。正如Mostafa所说,我得到了所有待处理的通知,然后我得到了一个包含所有ID的数组。
有了这些id和splice,我可以修改数组,删除我不想删除的所有通知,然后取消数组的所有通知。
我在这里留下了我在本例中用来删除除notification con id 10000000之外的所有通知的方法。

LocalNotifications.getPending().then( res => {
      var index = res.notifications.map(x => {
        return x["id"];
      }).indexOf("10000000");
      res.notifications.splice(index, 1);
      LocalNotifications.cancel(res);
    }, err => {
      console.log(err);
    })
iq0todco

iq0todco2#

  • 提供的解决方案不适合我 *

在花了几个小时试图解决同样的问题之后,我终于想出了一个更简单的解决方案。

const pending: LocalNotificationPendingList = {
  notifications: [
    {
      id: 'reminderId', // must be a string
    },
  ],
};

return LocalNotifications.cancel(pending);
mcvgt66p

mcvgt66p3#

使用下面的函数从列表中取消和清除单个通知。

cancel_notification(){
    LocalNotifications.getPending().then( res => {
    res.notifications = res.notifications.filter(i => i.id == this.notificationId);
      if(res.notifications.length>0)
      LocalNotifications.cancel(res);
      else
     {
      console.log('notification length zero');
     }
    }, err => {
      console.log(err);
    })
}
6ljaweal

6ljaweal4#

我偶然发现了完全相同的问题。我创建了一个 * 变通方法 *,将我唯一的字符串guid转换为数字哈希,这似乎对我的目的现在工作。

字符串哈希代码帮助器

为字符串生成***持久***哈希码

// convert a string to hashcode (integer)
      private stringHashCode = (str) => {
         let hash = 0;
         for (let i = 0; i < str.length; ++i) {
            hash = (Math.imul(31, hash) + str.charCodeAt(i)) | 0;
         }
         return hash;
      }

计划+取消逻辑

notificationId是转换为数字散列代码的唯一数据库关键字(session.id

// make guid numeric
      const notificationId = this.stringHashCode(session.id);

      // schedule logic
      LocalNotifications.schedule({
          notifications: [{
                title: 'test',
                body: 'body content',
                id: notificationId, // <== numeric
                schedule: { at: moment().add(10, 'seconds').toDate() },
           }]
      });

     // cancel logic
     const notifications: LocalNotificationRequest[] = [{ id : `${notificationId}`}]; // <== string
     await LocalNotifications.cancel({notifications});
rdlzhqv9

rdlzhqv95#

只要等待平台准备好,取消所有...

this.platform.ready().then()
{
   // Cancel All
   this.localNotifications.cancelAll();

   // Cancel by ID
   this.localNotifications.cancel(1);
}

相关问题