1. 程式人生 > >Android Calendar新增本地賬戶

Android Calendar新增本地賬戶

在Android原生程式碼中,日曆App如要新增活動,需要先新增賬戶,不方便使用者的使用。反編譯某某系統的CalendarProvider.apk,從中提取了新增本地賬戶的程式碼,在此共享。

主要修改了/packages/providers/CalendarProvider/下的CalendarDatabaseHelper.java檔案,其中包括了日曆資料庫的建立等操作。

// 系統建立日曆資料庫表結構的函式
private void createCalendarsTable(SQLiteDatabase db) {
    db.execSQL(/* 建立 Tables.CALENDARS 表 */
); // 新增本地日曆賬戶 insertLocalAccount(db);/* 建立表成功後,新增本地賬戶到資料庫 */ // 建立活動被刪除時的觸發器 // Trigger to remove a calendar's events when we delete the calendar db.execSQL("CREATE TRIGGER calendar_cleanup DELETE ON " + Tables.CALENDARS + " " + "BEGIN " + CALENDAR_CLEANUP_TRIGGER_SQL + "END"); } private
void insertLocalAccount(SQLiteDatabase db) { // 新增本地日曆賬戶 insertAccount(db, "account_name_local", "LOCAL", mContext.getResources().getString(R.string.calendar_displayname_local), 700, mContext.getResources().getString(R.string.owner_account_local), mContext.getResources().getColor(R.color.calendar_local_color), 5
); // 新增生日提醒賬戶 這個需要聯絡人App作同步修改,不需要的可以不加入 insertAccount(db, "account_name_local", "LOCAL", mContext.getResources().getString(R.string.calendar_displayname_birthday), 300, mContext.getResources().getString(R.string.owner_account_local), mContext.getResources().getColor(R.color.calendar_local_birthday), 0); } private void insertAccount(SQLiteDatabase db, String accountName, String accountType, String calendarDisplayName, int calendarAccessLevel, String ownerAccount, int calendarColor, int maxReminders) { ContentValues localContentValues = new ContentValues(); localContentValues.put("account_name", accountName);// 賬戶名稱 localContentValues.put("account_type", accountType);// 賬戶型別 localContentValues.put("calendar_displayName", calendarDisplayName);// 顯示的賬戶名稱 localContentValues.put("calendar_access_level", Integer.valueOf(calendarAccessLevel));// 訪問級別 localContentValues.put("ownerAccount", ownerAccount);// 賬戶擁有者 localContentValues.put("calendar_color", Integer.valueOf(calendarColor));// 賬戶區別顏色 localContentValues.put("sync_events", Integer.valueOf(1));// 是否同步 localContentValues.put("maxReminders", Integer.valueOf(maxReminders));// 最多設定的提醒器數量 db.insert("Calendars", null, localContentValues); }

關於谷歌的賬戶和同步,有很多需要學習的,與其費勁的自己寫日曆、聯絡人的同步,不如學習和使用谷歌提供的賬戶和SyncAdapter更方便。