車機端同步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.pswp.cn/web/62217.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62217.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62217.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OpenCV-圖像閾值

簡單閾值法 此方法是直截了當的。如果像素值大于閾值,則會被賦為一個值(可能為白色),否則會賦為另一個值(可能為黑色)。使用的函數是 cv.threshold。第一個參數是源圖像,它應該是灰度圖像。第二…

力扣300.最長遞增子序列

題目描述 題目鏈接300. 最長遞增子序列 給你一個整數數組 nums ,找到其中最長嚴格遞增子序列的長度。 子序列 是由數組派生而來的序列,刪除(或不刪除)數組中的元素而不改變其余元素的順序。例如,[3,6,2,7] 是數組 […

Vue CLI的作用

Vue CLI(Command Line Interface)是一個基于Vue.js的官方腳手架工具,其主要作用是幫助開發者快速搭建Vue項目的基礎結構和開發環境。以下是Vue CLI的具體作用: 1、項目模板與快速生成 Vue CLI提供了一系列預設的項目模板&#x…

【藍橋杯每日一題】掃雷

掃雷 知識點 2024-12-3 藍橋杯每日一題 掃雷 dfs (bfs也是可行的) 題目大意 在一個二維平面上放置這N個炸雷,每個炸雷的信息有$(x_i,y_i,r_i) $,前兩個是坐標信息,第三個是爆炸半徑。然后會輸入M個排雷火箭&#xff0…

【大數據學習 | 面經】Spark 3.x 中的AQE(自適應查詢執行)

Spark 3.x 中的自適應查詢執行(Adaptive Query Execution,簡稱 AQE)通過多種方式提升性能,主要包括以下幾個方面: 動態合并 Shuffle 分區(Coalescing Post Shuffle Partitions): 當 …

城電科技 | 光伏景觀長廊 打造美麗鄉村綠色低碳示范區 光伏景觀設計方案

光伏景觀長廊是一種結合了光伏發電技術和零碳景觀設計的新型公共公共設施,光伏景觀長廊頂上的光伏板不僅可以為周邊用電設備提供清潔電能,而且還能作為遮陽設施使用,為人們提供一個美麗又實用的休閑娛樂空間。 光伏景觀長廊建設對打造美麗鄉…

開發系統準備與開發環境配置總結

開發前系統配置及環境搭建 系統配置0 Github打不開、速度慢怎么辦1 WSL、Linux、Ubuntu、Docker都是什么鬼2 在Windows下安裝WSL和Ubuntu3 配置MySQL4 配置Redis并啟動服務5 Docker(Windows和Ubuntu下)6 Nginx 系統配置 你好! 這是你第一次使…

uniapp 添加loading

在uniapp中添加loading可以使用uni的API uni.showLoading 方法。以下是一個簡單的示例代碼 // 顯示loading uni.showLoading({title: 加載中 });// 假設這里是異步操作,比如網絡請求 setTimeout(function () {// 隱藏loadinguni.hideLoading(); }, 2000);

C++(九)

前言: 本文主要講述運算符的優先順序。 一,運算符的優先級。 請看以下表達式: a32*5 運算結果為:13. 可以看到,在此代碼中,先運行了2*5的結果,在此基礎上在進行3操作,因此結果…

Android 拍照(有無存儲權限兩種方案,兼容Q及以上版本)

在某些行業,APP可能被禁止使用存儲權限,或公司在寫SDK功能,不方便獲取權限 所以需要有 無存儲權限拍照方案。這里兩種方案都列出里。 對于寫入權限,在高版本中,已經廢棄, 不可用文件寫入讀取權限&#xf…

【Altium Designer 】AD如何使用嘉立創元器件的3D封裝

1.下載3D封裝 以STM32F407VGT6為例,進入嘉立創商城網站,找到需要的元器件封裝 復制編號,打開嘉立創EDA,編譯器選擇專業版,新建工程,點擊PCB1 復制編號在搜索框中,點擊搜索,然后放置…

爬蟲運行后數據如何存儲?

爬蟲運行后獲取的數據可以存儲在多種不同的存儲系統中,具體選擇取決于數據的規模、查詢需求以及應用場景。以下是一些常見的數據存儲方法: 1. 文件系統 對于小型項目或臨時數據存儲,可以直接將數據保存到本地文件中。常見的文件格式包括&…

【機器學習】機器學習的基本分類-監督學習-梯度提升樹(Gradient Boosting Decision Tree, GBDT)

梯度提升樹是一種基于**梯度提升(Gradient Boosting)**框架的機器學習算法,通過構建多個決策樹并利用每棵樹擬合前一棵樹的殘差來逐步優化模型。 1. 核心思想 Boosting:通過逐步調整模型,使后續的模型重點學習前一階段…

【機器學習 | 基于Lasso回歸和隨機森林的上海鏈家二手房房價預測】

文章目錄 🏳??🌈 1. 導入模塊🏳??🌈 2. Pandas數據處理2.1 讀取數據2.2 查看數據信息2.3 去除重復數據2.4 去除缺失數據2.5 面積、價格、單價、樓層、建筑時間數據提取2.6 朝向數據處理 🏳??🌈 3. 特…

【HarmonyOS NEXT】flexShrink屬性

一、背景 希望達到的布局效果是文字與按鈕左右對齊,居中顯示,但實際效果中按鈕的顯示與效果不符,如下圖所示 二、問題 按鈕是用row組件包裹的text,左右padding給的是一樣的大小,但是明顯右邊padding會比左邊padding大…

CentOS 7 上安裝 MySQL 8.0.40 (二進制安裝)

要在 CentOS 7 上安裝 MySQL 8.0.40,按照以下步驟操作: 下載安裝包。 https://dev.mysql.com/downloads/mysql/ 下載之前查看系統c版本 解壓安裝包 首先,解壓下載的 .tar.xz 安裝包。 cd /path/to/your/downloads tar -xvf mysql-8.0…

PHP語法學習(第六天)

💡依照慣例,回顧一下昨天講的內容 PHP語法學習(第五天)主要講了PHP中的常量和運算符的運用。 🔥 想要學習更多PHP語法相關內容點擊“PHP專欄” 今天給大家講課的角色是🍍菠蘿吹雪,“我菠蘿吹雪吹的不是雪,而…

Python Web 開發:使用 FastAPI 進行依賴注入與異常處理

Python Web 開發:使用 FastAPI 進行依賴注入與異常處理 目錄 🛠? 依賴注入與 FastAPI 高級特性?? 自定義異常類的實現與應用🚨 使用 HTTPException 處理常見錯誤🌍 全局異常處理器的設計與實現?? 異常處理與 API 響應的整合…

免押租賃系統助力資源共享新模式開創便捷租賃體驗

內容概要 免押租賃系統,聽起來是不是很酷?這個新模式不僅僅是為了讓你少花點錢,它的到來簡直就是個革命!以前,租東西時首先想到的就是那個令人心痛的押金,對吧?但現在,免押租賃系統…

oracle之用戶的相關操作

(1)創建用戶(sys用戶下操作) 簡單創建用戶如下: CREATE USER username IDENTIFIED BY password; 如果需要自定義更多的信息,如用戶使用的表空間等,可以使用如下: CREATE USER mall IDENTIFIED BY 12345…