android - 无法在 android 4.0 上设置日历事件 >

标签 android android-calendar

我正在制作一个访问 android 日历并创建事件的应用。

它在 android 2.3 中工作正常,但在 4.0 中 > 它不创建事件并抛出异常

我不知道我做错了什么,这是我的代码:

    public void addReminder() {

    Calendar beginTime = Calendar.getInstance();

    long startMillis = beginTime.getTimeInMillis();

    long endMillis = beginTime.getTimeInMillis() + 60 * 60 * 1000;


    String eventUriString = "content://com.android.calendar/events";
    ContentValues eventValues = new ContentValues();

    eventValues.put(Events.CALENDAR_ID, 1);
    eventValues.put(Events.TITLE, "Test");
    eventValues.put(Events.DESCRIPTION, "Test");
    eventValues.put(Events.EVENT_TIMEZONE, "Montevideo");
    eventValues.put(Events.DTSTART, startMillis);
    eventValues.put(Events.DTEND, endMillis);

    eventValues.put("eventStatus", 1);
    eventValues.put(Events.HAS_ALARM, 1);


        Uri eventUri = getContentResolver().insert(
                Uri.parse(eventUriString), eventValues);
        long eventID = Long.parseLong(eventUri.getLastPathSegment());

        String reminderUriString = "content://com.android.calendar/reminders";
        ContentValues reminderValues = new ContentValues();

        reminderValues.put("event_id", eventID);
        reminderValues.put("minutes", 1);
        reminderValues.put("method", 1);



        Uri reminderUri = getContentResolver().insert(
                Uri.parse(reminderUriString), reminderValues);


}

在 android 4.0 上 > 这是我得到的:

09-14 14:39:12.118: E/AndroidRuntime(826): FATAL EXCEPTION: main
09-14 14:39:12.118: E/AndroidRuntime(826): android.database.sqlite.SQLiteException
09-14 14:39:12.118: E/AndroidRuntime(826):  at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:181)
09-14 14:39:12.118: E/AndroidRuntime(826):  at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137)
09-14 14:39:12.118: E/AndroidRuntime(826):  at android.content.ContentProviderProxy.insert(ContentProviderNative.java:420)
09-14 14:39:12.118: E/AndroidRuntime(826):  at android.content.ContentResolver.insert(ContentResolver.java:866)
09-14 14:39:12.118: E/AndroidRuntime(826):  at com.example.notificationtest.MainActivity.addReminder(MainActivity.java:131)
09-14 14:39:12.118: E/AndroidRuntime(826):  at com.example.notificationtest.MainActivity$2.onClick(MainActivity.java:68)
09-14 14:39:12.118: E/AndroidRuntime(826):  at android.view.View.performClick(View.java:4204)
09-14 14:39:12.118: E/AndroidRuntime(826):  at android.view.View$PerformClick.run(View.java:17355)
09-14 14:39:12.118: E/AndroidRuntime(826):  at android.os.Handler.handleCallback(Handler.java:725)
09-14 14:39:12.118: E/AndroidRuntime(826):  at android.os.Handler.dispatchMessage(Handler.java:92)
09-14 14:39:12.118: E/AndroidRuntime(826):  at android.os.Looper.loop(Looper.java:137)
09-14 14:39:12.118: E/AndroidRuntime(826):  at android.app.ActivityThread.main(ActivityThread.java:5041)
09-14 14:39:12.118: E/AndroidRuntime(826):  at java.lang.reflect.Method.invokeNative(Native Method)
09-14 14:39:12.118: E/AndroidRuntime(826):  at java.lang.reflect.Method.invoke(Method.java:511)
09-14 14:39:12.118: E/AndroidRuntime(826):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
09-14 14:39:12.118: E/AndroidRuntime(826):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
09-14 14:39:12.118: E/AndroidRuntime(826):  at dalvik.system.NativeStart.main(Native Method)

这是我的权限:

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

它会是什么?

最佳答案

http://developer.android.com/guide/topics/providers/calendar-provider.html#intent-insert 将 Events.DTSTART、Events.DTEND 分别替换为 CalendarContract.EXTRA_EVENT_BEGIN_TIME、CalendarContract.EXTRA_EVENT_END_TIME。

Calendar beginTime = Calendar.getInstance();
beginTime.set(2012, 0, 19, 7, 30);
Calendar endTime = Calendar.getInstance();
endTime.set(2012, 0, 19, 8, 30);
Intent intent = new Intent(Intent.ACTION_INSERT)
        .setData(Events.CONTENT_URI)
        .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis())
        .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis())
        .putExtra(Events.TITLE, "Yoga")
        .putExtra(Events.DESCRIPTION, "Group class")
        .putExtra(Events.EVENT_LOCATION, "The gym")
        .putExtra(Events.AVAILABILITY, Events.AVAILABILITY_BUSY)
        .putExtra(Intent.EXTRA_EMAIL, "rowan@example.com,trevor@example.com");
startActivity(intent);

关于android - 无法在 android 4.0 上设置日历事件 >,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18802890/

相关文章:

android - 如何确定 UsbRequest.queue(..) 方法接收字节的长度?

java - Android 文档中的字段和常量有什么区别?

android - MonthDisplayHelper.NumberOfDaysInMonth 在 MonoDroid 中返回不正确的值

android - 如何在 Android 中对日历事件进行分类?

Android edittext手机格式

Android 应用程序未在主屏幕上创建快捷方式图标(从 Play 商店下载)

android - TextView 未显示在 RelativeLayout 中

android - 从日期和时间选择器中选择日期和时间后,如何将它们作为参数传递给日历的 'Create Event' 函数?

java - Android 自定义日历/日期选择器

java - Material 日历 View 高度环绕问题