当前位置: 首页 > news >正文

车机端同步outlook日历

最近在开发一个车机上的日历助手,其中一个需求就是要实现手机端日历和车机端日历数据的同步。然而这种需求似乎没办法实现,毕竟手机日历是手机厂商自己带的系统应用,根本不能和车机端实现数据同步的。
那么只能去其他公共的平台寻求一些机会,最后瞄上了邮箱日历的同步方式。大致的架构如下:
在这里插入图片描述
使用exchange服务中的日历共享机制,可以把outlook日历文件通过URL连接的方式发布出来,任何客户端都可以去访问这个日历文件,做到手机端和车机端上数据的同步。这种方式存在的问题就是:

  • 车机端只能是被动的接收,不能去做修改;
  • 需要用户自己去发布日历,并且还要把URL字符串自己填到车机里面,很繁琐。

但在目前有限的资源情况下,此方案是唯一可以落地的。

具体实现步骤:

1.日历发布

首先需要有自己的outlook账号,并且在web浏览器中访问自己的outlook邮箱账号,把自己的邮箱中的日历发布出来,会生成一串连接,如下:
在这里插入图片描述

2.手机导入日历

在手机系统日历应用中,去订阅这个ICS的的连接。进入日程导入:
在这里插入图片描述
然后选择URL导入的方式:
在这里插入图片描述
本来按理说应该使用邮箱账号的方式导入outlook日历的,但是就在2024年,微软终止了基础方式的登录验证。也就是说,对没有升级新的验证方式的软件(比如本手机xiaomi系统自带的日历APP),只是用账号+密码的方式不能登陆上微软的exchange服务器了,同步不了数据。
手机应用导入了outlook日历的URL,就会定期去同步这个地址的日历数据,并导入到自己的系统中。这里便实现了手机日历和outlook日历的同步。

3.车机导入日历

车机日历也要获取到此URL连接,才能导入对应的outlook日历。只是在车机端,需要我们开发人员自己去实现拉取远程日历文件并解析的过程。

3.1 ICS文件简介:

outlook日历使用的是icalendar这种日历数据交互标准(RFC 2445),icalendar标准定义了描述日历信息的通用格式,它内部还分为了很多类型组件,比如Events(VEVENT)、To-do(VTODO)、Journal(VJOURNAL)、VTIMEZONE (time zones) 和 VALARM (alarms))等,比如下面文件内容:
在这里插入图片描述
每个事件都会以BEGIN开头,以END结束。

3.2下载ICS文件

这并不难,在Android端使用Retroft框架,然后根据用户填写的发布的URL地址,可以轻松实现web服务器的文件下载,我这里是先把文件保存到本地,然后再从本地加载文件流并读取数据。

3.3解析ICS文件

重点说一下解析ICS文件,使用ical4j这个库文件去完成的。
首先需要在整个工程的setting.gradle中添加:

dependencyResolutionManagement {repositories {......maven { url "https://jitpack.io" }}
}

然后在module的gradle文件中添加引用:

dependencies {......api("org.mnode.ical4j:ical4j:3.2.11") {// exclude modules which are in conflict with system librariesexclude group: 'commons-logging'exclude group: 'org.json', module: 'json'// exclude groovy because we don't need itexclude group: 'org.codehaus.groovy', module: 'groovy'exclude group: 'org.codehaus.groovy', module: 'groovy-dateutil'}
}

这样就可以把对应的jar包加载到项目中。
然后就是提取文件流里面的数据:

private fun readCalendarFromInputStream(inputStream: InputStream) {var build = CalendarBuilder()var calendar = build.build(inputStream)for(i in calendar.components) {when(i) {is VEvent ->convertVEvent(i)else -> Log.d(TAG, "$i")}}}

我们这里主要是提取VEvent类型的数据,即日历事件,这个数据结构中包含了上述日志事件例子中的所有字段信息,比如开始时间、结束时间、标题、描述等信息。需要注意的是,从outlook上同步过来的icalendar,时间都是GMT时区,我们需要自己转换成GMT+8时区。

http://www.lryc.cn/news/498982.html

相关文章:

  • 教学案例:k相同的一次函数的图像关系
  • EmoAva:首个大规模、高质量的文本到3D表情映射数据集。
  • Elasticsearch vs 向量数据库:寻找最佳混合检索方案
  • 【Flink-scala】DataStream编程模型之水位线
  • Python导入moviepy找不到editor 视频没有声音设置audio_codec参数
  • rsync 是一个非常强大的 Linux 工具,常用于文件和目录的同步、备份和传输。
  • 触发器案例详解
  • jwt 与 sessionid 的区别及应用场景
  • tomcat和nginx
  • 服务器带宽与数据安全的重要性与作用
  • JSON数据处理
  • FSWIND脉动风-风载时程生成器软件原理
  • 搭建高可用负载均衡系统:Nginx 与云服务的最佳实践
  • 对比git命令与TortoiseGit工具,理解git解决冲突的过程
  • guava缓存的get方法的回调函数讲解一下
  • React基础知识四 Hooks
  • 线性代数中的谱分解
  • Redis 数据结结构(一)—字符串、哈希表、列表
  • 【Python】用Python和Paramiko实现远程服务器自动化管理
  • PDF处理的创新工具:福昕低代码平台尝鲜
  • openstack创建浮动IP全过程
  • nginx漏洞修复
  • Jackson - 序列化时更改字段名称
  • 策略模式实战 - 猜拳游戏
  • AWS ECS Task 添加 Prometheus 监控采集配置详细指南
  • 5. 一分钟读懂“工厂方法模式”
  • 基于 AutoFlow 快速搭建基于 TiDB 向量搜索的本地知识库问答机器人
  • C语言学习:速通指针(2)
  • windows 上ffmpeg编译好的版本选择
  • Java设计模式笔记(二)