提醒

使用基于笔记的提醒


我们可以在用户帐户内的笔记上设置提醒,使用户可以:

  • 在预定义的时间接收提醒。在印象笔记官方的客户端应用程序中,提醒的形式可能是本地通知,图标徽章等等。这会根据应用程序的不同而变化,并且会有一封印象笔记发送的当日邮件,邮件内会有一个列表列出所有当日截止的提醒(如果用户选择了这个功能的话)。
  • 将一条或多条笔记放置在一个笔记列表(比如笔记本的内容,搜索的结果,浏览某个标签——几乎所有的会列出笔记列表的情况)的最上方。

这项功能是由 NoteAttributes 数据结构中的三条属性来控制的:reminderTimereminderOrderreminderDoneTime

reminderOrder

设置长整形的 reminderOrder 属性会完成下面三件事:

  1. 为要同步到印象笔记的笔记设置一个提醒。所有其他的印象笔记应用——还有第三方应用——都可以访问到这个提醒的数据。
  2. 强制这条笔记显示在笔记列表的最上方或靠近最上方(这要看设定了这个属性的笔记具体有多少条)。
  3. 控制这条笔记在都设置了 reminderOrder 的笔记中的位置。

最后的这个作用可能需要一些解释:

打个比方,如果一个笔记本包含10条笔记并且其中的3条都设置了 reminderOrder,这3条笔记就会按 reminderOrder 的值进行降序排序。印象笔记官方的应用在设置此值的时候,会将其赋为 Unix 时间戳的毫秒数表示形式,如此可指示用户是何时将笔记标为一个提醒的。第三方应用在为笔记设置 remindeOrder 的时候也应该做类似的处理。

reminderTime

为笔记设定 reminderTime 值指示着用户希望在特定的日期、时间可以提醒这条笔记。那么当到了 reminderTime 属性储存的那个日期时间的时候,就会针对各个不同的平台使用相应的通知手段,触发一个通知。这个值是一个用毫秒数来表示的 Unix 时间戳。

注意如果 reminderTime 被设置在一个没有设置 reminderOrder 属性的笔记上,那么印象笔记服务会自动为 reminderOrder 赋一个值。尽管如此,你还是应当理解 reminderOrder 的工作原理和手动设置的方法。

reminderDoneTime

当用户标记一个含有提醒的笔记为 “done” 的时候,这个属性就被设置为用户完成此操作(第三方应用也只能在同样的情境下才能做此操作)的日期和时间——也是用 Unix 时间戳的毫秒数表示形式。使用此功能的第三方应用可能要在他们的 UI 里为已经完成的提醒作说明。

如果笔记的 reminderDoneTime 没有设置而 reminderTime 设置了,那么应当在 UI 中重新启用这个提醒。

重排提醒

使用 reminderOrder 的第三方应用可能要支持用户任意重排笔记(当然,这是一个相当高级的特性了,可能并非第三方应用的需求)。例如:

如果用户正在查看之前提到的那三条笔记的一个列表:

  • 笔记 A (reminderOrder 被设置为 10)
  • 笔记 B (reminderOrder 被设置为 20)
  • 笔记 C (reminderOrder 被设置为 30)

如果用户将笔记 A 拖拽到笔记 B 和笔记 C 之间,那么笔记 A 的 reminderOrder 的值就会被重设为位于笔记 B 和笔记 C 之间的值。在这里,笔记 A 的 reminderOrder 的值会应当被设为 25。实际运用中,这条被移动的笔记的 reminderOrder 应当被设置为相邻两条笔记的 reminderOrder 值的平均数。

手动调整设置了 reminderOrder 的笔记的次序是一个高阶操作;大多数开发者不需要关注这个功能除非它对他们自己的应用有益处。

注意:虽然技术上允许,但是上面例子中用的简单的整数是为了简化对概念的讲解,实际使用的时候应当避免这种简单的整数,要采用实际时间戳的值。

示例代码

下面的代码创建了一个新的笔记对象,设置了笔记的 NoteAttributes 结构中的 reminderOrderreminderTime 属性,并且通过调用 NoteStore.createNote 创建了这条笔记。代码的最后一行将 reminderDoneTime 属性设置成了当前的时间,将这个提醒标为了 "done"。

要想搜索设置了 reminderOrder(或者其他提醒相关的属性)的笔记,你可以使用 NoteStore.findNotesMetadata 结合 NoteFilter 实例: