0

我有一个奇怪的问题,我不知道如何解决这个问题。我已经测试了很多东西,但不知道是什么问题。

好的,我已经创建了简单的程序来将事件插入谷歌日历设备,这将成功插入谷歌日历。

当我尝试从谷歌日历编辑或点击编辑菜单谷歌日历将崩溃。我在许多设备上进行了测试,所有设备日历的问题都是一样的。

这是我的代码

ContentResolver cr = getContentResolver();
        ContentValues values = new ContentValues();
        Uri EVENTS_URI = null;

        EVENTS_URI = Uri.parse("content://com.android.calendar/events");

        long time = System.currentTimeMillis();

        values.put("calendar_id", 1);
        values.put("title", "event.eventName");
        values.put("allDay", 0);
        values.put("dtstart", time); 
        values.put("dtend", time + 1000 * 60 * 60 * 2);
        values.put("description", "description");
        values.put("visibility", 0);
        values.put("transparency", 0);
        values.put("hasAttendeeData", 0);
        values.put("hasAlarm", 1);
        values.put("eventLocation", "location");
        cr.insert(EVENTS_URI, values);

我无法检测或推断为什么仅在我插入的事件中发生这种情况

4

2 回答 2

0

如果你考虑这样做,你可以这样做:

Intent intent = new Intent(Intent.ACTION_EDIT);
int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < ICE_CREAM_BUILD_ID) {
    // all SDK below ice cream sandwich
    intent.setType("vnd.android.cursor.item/event");
    intent.putExtra("beginTime", startTime);
    intent.putExtra("endTime", endTime);
    intent.putExtra("title", title);
    intent.putExtra("description", description);
    intent.putExtra("eventLocation", location);
    intent.putExtra("allDay", isAllDay);

//  intent.putExtra("rrule", "FREQ=YEARLY");
} else {
    // ice cream sandwich and above
    intent.setType("vnd.android.cursor.item/event");
    intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, startTime);
    intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime);
    intent.putExtra(Events.TITLE, title);
    intent.putExtra(Events.ACCESS_LEVEL, Events.ACCESS_PRIVATE);
    intent.putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY , isAllDay);
    intent.putExtra(Events.DESCRIPTION, description);
    intent.putExtra(Events.EVENT_LOCATION, location);

//  intent.putExtra(Events.RRULE, "FREQ=DAILY;COUNT=10") 
}
try {
    context.startActivity(intent);
    return true;
} catch(Exception e) {
    return false;
}
于 2012-11-09T12:11:37.073 回答
0

在对插入事件进行分析并在 logcat 中搜索日历后,我发现当我尝试编辑从我的应用程序插入的事件时,我的日历被强制关闭。

原因是我没有为我的事件设置 TimeZone 字段值,并且在日历中它将在编辑时获得空指针,这就是它强制关闭的原因

我还搜索了适用于 android 的 logcat 应用程序,我发现了这个

https://play.google.com/store/apps/details?id=org.jtb.alogcat&feature=search_result

要从该日志中检测对我非常有用的所有日志,我知道 TimeZone 填充值 null 并且日历应用程序崩溃了。

所以我只是在插入时添加这个填充值,它工作得很好。

用于 ICS

values.put(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().getID());

低于 ICS

values.put("eventTimezone", TimeZone.getDefault().getID());
于 2012-11-10T09:38:46.837 回答