Android Calendar新增本地賬戶
阿新 • • 發佈:2019-01-24
在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更方便。