android 日历

本文介绍了一个经过修改的日历组件,该组件源自第三方开发者的作品,并对其进行了调整,特别是将底部部分改为了listview形式,提供了源码下载链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  

写个笔记记录下,日历是别人写的:

稍作了修改(底部改用listview)

出处:https://github.com/haibuzou/Calendar365



源码地址:点击打开链接



### Android 日历 API 的使用 在 Android 平台中,开发者可以通过 `CalendarContract` 提供的接口来访问设备上的日历数据。此 API 主要用于读取、写入以及管理用户的日历事件和提醒等内容[^1]。 #### 权限声明 为了能够正常操作日历功能,在应用清单文件 (`AndroidManifest.xml`) 中需要申请相应的权限。以下是常见的权限设置: ```xml <uses-permission android:name="android.permission.READ_CALENDAR" /> <uses-permission android:name="android.permission.WRITE_CALENDAR" /> ``` 这些权限分别允许应用程序读取和修改用户的日历信息[^2]。 #### 查询现有日历账户 通过查询 `CalendarContract.Calendars.CONTENT_URI` 可以获取当前可用的日历列表及其属性。下面是一个简单的例子展示如何检索所有的日历名称及相关 ID: ```java ContentResolver contentResolver = getContentResolver(); Uri uri = CalendarContract.Calendars.CONTENT_URI; String[] projection = new String[]{ CalendarContract.Calendars._ID, CalendarContract.Calendars.ACCOUNT_NAME, CalendarContract.Calendars.CALENDAR_DISPLAY_NAME }; Cursor cursor = contentResolver.query(uri, projection, null, null, null); if (cursor != null && cursor.moveToFirst()) { do { long calendarId = cursor.getLong(cursor.getColumnIndex(CalendarContract.Calendars._ID)); String accountName = cursor.getString(cursor.getColumnIndex(CalendarContract.Calendars.ACCOUNT_NAME)); String displayName = cursor.getString(cursor.getColumnIndex(CalendarContract.Calendars.CALENDAR_DISPLAY_NAME)); Log.d("Calendar", "ID: " + calendarId + ", Account Name: " + accountName + ", Display Name: " + displayName); } while (cursor.moveToNext()); } if (cursor != null) { cursor.close(); } ``` 上述代码片段展示了如何遍历并打印出每一个已安装的日历账户详情[^3]。 #### 创建新事件 创建一个新的日程安排涉及向数据库插入一条记录到 `Events` 表格里。这里给出一段示范性的 Java 代码用来新增加一个会议预约: ```java TimeZone timeZone = TimeZone.getDefault(); ContentValues values = new ContentValues(); values.put(CalendarContract.Events.DTSTART, startTimeInMillis); // 设置开始时间戳(毫秒) values.put(CalendarContract.Events.DTEND, endTimeInMillis); // 结束时间戳同样单位为毫秒 values.put(CalendarContract.Events.TITLE, title); // 添加标题字段 values.put(CalendarContract.Events.DESCRIPTION, description); // 描述说明可选填项 values.put(CalendarContract.Events.EVENT_TIMEZONE, timeZone.getID()); Uri eventInsertUri = Uri.parse("content://com.android.calendar/events"); Uri resultUri = context.getContentResolver().insert(eventInsertUri, values); long eventId = Long.parseLong(resultUri.getLastPathSegment()); Log.i(TAG,"Event created with id:"+eventId); ``` 注意这里的 `startTimeInMillis` 和 `endTimeInMillis` 应该转换成 UTC 时间格式以便跨时区兼容性良好[^4]。 #### 删除指定事件 如果想移除某特定活动,则需调用 delete 方法传入对应 URI 即可完成删除动作如下所示: ```java int rowsDeleted = resolver.delete(ContentUris.withAppendedId( Events.CONTENT_URI, eventId), null, null); if(rowsDeleted>0){ System.out.println("Successfully deleted the Event!"); }else{ System.err.println("Failed to Delete The Event."); } ``` 以上就是关于 Android 系统下利用官方提供的 Calendar Provider 进行基本 CRUD 操作的一些介绍[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值