如果想在Android App中跟Google日歷互動,其中一個方法就是使用Calendar Provider API。網路上很容易找到相關的資料,但資料都很零碎而且沒有一個完整的基本範例,我把資料整理後記錄下來方便下次使用。
Windows 10
Android 7.1.1 API level 25
Android Studio 2.3.1
範例的影片:
https://youtu.be/DCUlL6GMvQo
每個Google帳戶都能登入Google日歷,預設有一個屬於你帳戶的日歷,你可以把別人的日歷加到你的帳戶,又可以自行新增日歷,每個日歷包括了活動。3款日歷中只有預設及自行新增的日歷能編輯,當中只有預設日歷是真正使用者擁有的,因此在API中找使用者擁有的日歷時,只會找到預設的耶一個,自行新增的是找不到的。
如果要在Android Apps中新增,更改或刪除活動,第一步是先要找出目標帳戶,然後找出目標日歷,之後才編輯活動。下面記錄了從一個新建的Project中加入編輯Google活動的步驟。
此範例中所有功能都是在介面執行緒執行,實際使用時應該在背景執行,本範例只記錄了以下幾個常用的功能:
- 找出目標帳戶
- 找出目標日歷
- 列出活動
- 新增活動
- 更新活動
- 刪除活動
事前準備:
1. 準備一個安裝了Google Calendar的模擬器或實體機
2. 確認在Android Studio SDK Manager已經下載Support Repository目錄下的Google Repository
3. 新增一個Android Studio Project,minimum SDK = API25,選擇Empty Activity
開始:
1. 製作一個簡單介面方便展示功能,包括了Button及EditText,把下面的代碼貼到activity_main.xml
2. 找出目標的Google帳戶 (使用AccountPicker,不需任何Permission)
- 要使用AccountPicker,先要安裝兩個Google Play Service功能,把以下代碼貼到build.gradle(Module: app)
- 真正應用時應該要先檢查Google Play Service的版本,如果對應才繼續執行,這範例跳過這步驟
- 除了使用AccountPicker還有其他方法來取得帳戶,但需要有讀取聯絡人的權限
- 在MainActivity class中插入以下代碼,每當調用函數時會出現下面的效果
- 當沒有帳戶登入了手機時,會出現登入畫面,建立或登入帳戶後會從onActivityResult返回帳戶名稱
- 當已經有帳戶登入了手機時,會出現叫用家選擇帳戶的畫面,然後從onActivityResult返回所選的帳戶名稱
3. 要求使用者給予權限
- 在MainActivity class中插入以下代碼,每當調用函數時會要求使用者給予權限
4. 找出目標日歷 (使用CalendarProvider,需要讀取日歷的權限)
- 在此範例會找出使用者所選的帳戶及可以完全控制的日歷
- 因應Android 6.0 開始改變了獲取權限的方式,從以前安裝前要求獲取所有權限變成執行中才要求獲取所需的權限,所以在開始查詢前要先檢查有沒有所需的權限
- 在MainActivity class中插入以下代碼,每當調用函數時會找出日歷及要求使用者選擇
5. 列出活動 (使用CalendarProvider,需要讀取日歷的權限)
- 查詢活動跟查詢日歷差不多,不同的是要定義所查詢的日期範圍
- 在MainActivity class中插入以下代碼,每當調用函數時會找出活動及要求使用者選擇
4. 新增活動 (使用CalendarProvider,需要寫入日歷的權限)
- 在MainActivity class中插入以下代碼,每當調用函數時會新增活動及返回新增的活動ID
5. 更新活動 (使用CalendarProvider,需要寫入日歷的權限)
- 在MainActivity class中插入以下代碼,每當調用函數時會更新活動的標題
6. 刪除活動 (使用CalendarProvider,需要寫入日歷的權限)