【问题标题】:Inserting Calendar items in Android ICS在 Android ICS 中插入日历项目
【发布时间】:2013-07-19 13:56:47
【问题描述】:

对于我的一个应用程序,我们必须在日历中插入一个事件。

long calID = 3;
long startMillis = 0; 
long endMillis = 0;     
Calendar beginTime = Calendar.getInstance();
beginTime.set(2012, 8, 10, 7, 30);
startMillis = beginTime.getTimeInMillis();
Calendar endTime = Calendar.getInstance();
endTime.set(2012, 8, 10, 8, 45);
endMillis = endTime.getTimeInMillis();
ContentResolver cr = getContentResolver();
ContentValues values = new ContentValues();
values.put(Events.DTSTART, startMillis);
values.put(Events.DTEND, endMillis);
values.put(Events.TITLE, "Jazzercise");
values.put(Events.DESCRIPTION, "Group workout");
values.put(Events.CALENDAR_ID, calID);
values.put(Events.EVENT_TIMEZONE, "America/Los_Angeles");
Uri uri = cr.insert(CalendarContract.Calendars.CONTENT_URI, values);
// get the event ID that is the last element in the Uri
long eventID = Long.parseLong(uri.getLastPathSegment());
Log.d("MainActivity", "addCalendarEvents :: " + "eventID :: "+eventID);

Cursor cursor = cr.query(Events.CONTENT_URI, null, Events.TITLE +"='Jazzercise'", null, null);
Log.d("MainActivity", "addCalendarEvents :: " + "cursor :: "+cursor.getCount());

提供于http://developer.android.com/guide/topics/providers/calendar-provider.html 但是,首先它给了我一个错误

 Failed to get type for: content://com.android.calendar (Unknown URL content://com.android.calendar)

游标计数也为零。当我尝试使用标题搜索时。 注意:我尝试使用意图服务添加事件,但是我不希望用户在添加事件时自行决定。

我已经在 Galaxy Nexus (4.1) 和 Nexus S(4.1) 上对其进行了测试。

对于要与 ICS 一起使用的正确 UI 有任何帮助吗?

BR, 杰希尔

【问题讨论】:

  • 注意:我没有收到明显的崩溃或错误。
  • 如果开发社区的某个人在 4.0 ICS 设备中尝试此操作,那将非常有帮助。如果是 Jellybean 问题或 4.0 及以上问题。
  • 这个错误出现在 jellybean 更新之后,我在 nexus 7 上遇到了同样的问题。在 ICS 上我的代码工作,更新后它停止并且 logcat 报告你引用的行。然后它提供 com.google.android.calendar 作为替代,但如果我在我的代码中替换它,这仍然不起作用。

标签: android calendar android-contentprovider


【解决方案1】:

我想通了。行:

Failed to get type for: content://com.android.calendar (Unknown URL content://com.android.calendar)

完全是红鲱鱼(即无关紧要)。它只是一些执行基础设施工作的框架代码,as seen here


问题在于文档 - 如果您像我一样,您可能希望 long calID = 3; 是一些有效的日历 ID。 这不是一个有效的 ID,它是一个用于记录的占位符

如果您使用的是空模拟器,您对上面的代码所做的操作是将条目插入到不存在的日历中,即无处可见。

你需要做的是:

  1. Query for and choose an existing calendar。再说一次 - 在模拟器上,没有默认日历
  2. 使用获取的实际日历ID插入事件。

简而言之 - 文档和调试消息不足以防白痴;)。

【讨论】:

  • 喜欢最后一行..几天前我刚刚找到了相同的解决方案..不得不把它交给你...
  • 在最新的文档之间要好得多。它们首先让您查询日历,然后显示如何插入。
【解决方案2】:

您在 Manifest 文件中拥有正确的权限吗?

<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />

这可能是您看到的错误的部分原因。

【讨论】:

  • 是的,我确实拥有这些权限。
【解决方案3】:
content://com.android.calendar - problem is here.

它的日历。

试试这个代码:

Uri mCalendarsUri;
if (Build.VERSION.SDK_INT >= 8) {
    mCalendarsUri = Uri.parse("content://com.android.calendar/calendars");
} else {
    mCalendarsUri = Uri.parse("content://calendar/calendars");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 2022-08-14
    • 1970-01-01
    • 2015-10-25
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多