车机端同步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.xdnf.cn/news/34514.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

群控系统服务端开发模式-应用开发-邮件工厂结构封装

首先在系统根目录下extend文件夹下创建邮件工厂文件夹并更名叫Mail。 一、邮件发送父类 在Mail目录下创建邮件发送父类并更名为MailSenderInterface.php&#xff0c;代码如下 <?php /*** 邮件发送父类* User: 龙哥三年风水* Date: 2024/12/5* Time: 14:22*/ namespace Ma…

React性能优化

三个可以优化的地方 避免过度多次渲染 组件会在以下情况下重新渲染 注意&#xff1a;例如组件组合的形式&#xff0c;<Test><Counter></Counter></Test>,即使Test发生了重新渲染&#xff0c;Counter也不会重新渲染。另外使用React这样的库或框架时&a…

操作系统学习

问题&#xff1a; 因为想用傲梅来给系统盘扩容&#xff0c;导致无法进入操作系统&#xff0c;报错如下&#xff1a; 无法加载应用程序或操作系统&#xff0c;原因是所需文件丢失或包含错误. 文件:Windowslsystem32lwinload.efi错误代码: 0xc000007b 你需要使用恢复工具。如果…

Web应用程序文件包含-Server2233-解析

B-6 Web应用程序文件包含 任务环境说明:服务器场景名称:Server2233

计算机的错误计算(一百七十五)

摘要 就计算机的错误计算&#xff08;一百七十三&#xff09;与&#xff08;一百七十四&#xff09;中案例&#xff0c;讨论其另外一种形式&#xff1a; 的错误计算问题。 例1. 已知 计算 直接贴图吧&#xff1a; 这样&#xff0c;MATLAB的输出中有4位错误数字&#xff0…

F-K变换法

f-k变换实质上是一种二维傅里叶变换。 在时间域上,对一道地震信号做傅里叶变换,可以得到在时间上不同频度(称为频率)的 波动组分的振幅和相位信息。同样地,在空间上,我们也可以对多道地震信号做类似傅里叶变 换的数值变换,得到在空间上不同频度(称为波数)的波动组分的振幅…

webstorm关闭了弹窗 Confirm Exit 恢复回来

webstorm关闭了 Confirm Exit WebStorm 关闭了“Confirm Exit”功能&#xff0c;意味着当用户尝试关闭IDE时&#xff0c;不会显示确认对话框&#xff0c;直接退出程序。 如果你想要恢复这个功能&#xff0c;可以按照以下步骤操作&#xff1a; 打开WebStorm。 进入设置界面&a…

集成学习之-stacking

一、引言 对于单模型来说&#xff0c;模型的抗干扰能力低&#xff0c;且难以拟合复杂的数据。 所以可以集成多个模型的优缺点&#xff0c;提高泛化能力。 集成学习一般有三种&#xff1a;boosting是利用多个弱学习器串行&#xff0c;逐个纠错&#xff0c;构造强学习器。 baggin…

Linux-使用 tslib 库

上一章我们学习了如何编写触摸屏应用程序&#xff0c;包括单点触摸和多点触摸&#xff0c;主要是对读取到的 struct input_event 类型数据进行剖析&#xff0c;得到各个触摸点的坐标。本章向大家介绍 tslib 库&#xff0c;这是 Linux 系统下&#xff0c;专门为触摸屏开发的应用…

SHELL----正则表达式

一、文本搜索工具——grep grep -参数 条件 文件名 其中参数有以下&#xff1a; -i 忽略大小写 -c 统计匹配的行数 -v 取反&#xff0c;不显示匹配的行 -w 匹配单词 -E 等价于 egrep &#xff0c;即启用扩展正则表达式 -n 显示行号 -rl 将指定目录内的文件打…

[Redis#15] 持久化 | AOF | rewrite | aof_buf | 混合持久化

目录 1 使用AOF 流程 问题一&#xff1a;父进程在fork之后继续写旧AOF文件的意义 问题二&#xff1a;执行BGREWRITEAOF时的特殊情况处理 2 命令写入 3 文件同步 4 重写机制 工作流程&#xff1a; 触发条件 混合持久化 持久化 sum AOF&#xff08;Append Only File&a…

重生之我在异世界学智力题(1)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言智力题题目&#xff1a;《奇怪的时钟…

【WRF后处理】WRF时区(UTC)需转化为北京时间(CST)!!!

目录 WRF运行时间标准注意事项-本地时区问题 输入数据&#xff1a;ERA5时间标准ERA5数据和WRF模型需要转换为北京时间&#xff01;&#xff01;&#xff01;北京时间&#xff08;CST&#xff09;与协调世界时&#xff08;UTC&#xff09;的关系转换方法 参考 WRF运行时间标准 …

css怎么使页面高度占满屏幕?

下面是一个小程序的页面&#xff0c;用uniapp写的&#xff0c;现在有一个问题&#xff0c;就是最外层的allmy的图层&#xff0c;屏幕是灰色&#xff0c;我怎么才能使这个图层占满屏幕&#xff0c;就是让灰色占满屏幕。 直接先给page设置一个height:100%;然后allmy的height:100%…

K8S离线部署Nacos集群【Oracle作外部数据源】

一、前言 由于公司的要求下要使Nacos集群以Oracle作为外部数据源&#xff0c;前期咱们已经阐述了如何在本地搭建&#xff08;Nacos集群搭建【Oracle作外部数据源】&#xff09;&#xff0c;本次将带领大家在k8s上部署Nacos集群并以Oracle作为外部数据源。 二、软件包 nacos-f…

Halcon 深度学习目标分类:原理与应用全解析

摘要&#xff1a; 本文深入探讨了 Halcon 在深度学习目标分类方面的原理及广泛的应用场景。详细阐述了从数据准备到模型训练与分类决策的目标分类工作流程&#xff0c;剖析了其背后的深度学习技术支撑。同时&#xff0c;结合多个行业领域&#xff0c;展示了 Halcon 目标分类技术…

【burp】burpsuite基础(五)

Burp Suite基础&#xff08;五&#xff09; 声明&#xff1a;该笔记为up主 泷羽的课程笔记&#xff0c;本节链接指路。 警告&#xff1a;本教程仅作学习用途&#xff0c;若有用于非法行为的&#xff0c;概不负责。 抓包方式 burp在抓包上十分全面&#xff0c;这里介绍几种抓包…

固态电池产业路径思考

《固态电池产业路径思考》主要探讨了固态电池的研究思路、解决方案、已取得的成果以及TC固态电池的介绍。以下是核心内容的整理&#xff1a; 一、固态电池优势 高比能耐高温易匹配高电压镍钴锰&#xff08;NCM&#xff09;正极和金属锂负极 二、固态电池关键共性问题 固态电…

第3章.垃圾收集器与内存分配策略

概述 对象已死 引用计数法 可达性分析算法 再谈引用 生存还是死亡 回收方法区 垃圾收集算法 分代收集理论 3种垃圾收集算法 HotSpot的算法细节实现 根节点枚举 安全点 安全区域 记忆集与卡表 写屏障 并发的可达性分析 误消亡问题 经典垃圾收集器 概述 简单的一些GC CMS G1 低延…

推动行业创新 猿辅导素养课斩获“2024影响力教育品牌”奖项

近日&#xff0c;由教育界网、校长邦联合主办&#xff0c;鲸媒体、职教共创会协办的“第9届榜样教育年度盛典”评奖结果揭晓。猿辅导素养课凭借在素养教育领域的卓越表现和深远影响力&#xff0c;荣获“2024影响力教育品牌”奖项。这一殊荣不仅肯定了猿辅导素养课在教学教研和产…