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更方便。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值