2017年4月11日 星期二

Android Calendar Provider的基本用法及範例

如果想在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. 找出目標帳戶
  2. 找出目標日歷
  3. 列出活動
  4. 新增活動
  5. 更新活動
  6. 刪除活動

事前準備:
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,需要寫入日歷的權限)

2 則留言: