【问题标题】:Unable to add calendar events programmatically for Android 4.1无法以编程方式为 Android 4.1 添加日历事件
【发布时间】:2012-12-13 16:02:31
【问题描述】:

我正在尝试在 Android 应用中创建一个按钮,该按钮能够在不启动 Intent 的情况下将事件添加到日历中。

我找到了这个官方的 android 资源,它解释了如何实现这一点。

long calID = 3;
long startMillis = 0; 
long endMillis = 0;     
Calendar beginTime = Calendar.getInstance();
beginTime.set(2012, 9, 14, 7, 30);
startMillis = beginTime.getTimeInMillis();
Calendar endTime = Calendar.getInstance();
endTime.set(2012, 9, 14, 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(Events.CONTENT_URI, values);

我已经在许多设备上测试过这段代码,包括 2.3、4.0、4.1 和 4.2。

这似乎无法在 4.1 设备上运行。我尝试使用此代码添加日历事件,但无济于事。其他人可以在 4.1 上确认此错误吗?或者是否有将日历事件添加到 4.1 的解决方法?

【问题讨论】:

标签: android android-intent calendar android-4.2-jelly-bean


【解决方案1】:

我遇到了同样的问题。

在文档中您可以阅读:

实际上,插入和更新应该在异步线程中完成,以将操作移动到后台线程中。

删除代码的最后一行并使用:

AsyncQueryHandler handler = new MyHandler(getContentResolver());
handler.startInsert(0, null, Events.CONTENT_URI, values);

其中MyHandler 是一个扩展AsyncQueryHandler 的类(即抽象):

public class MyHandler extends AsyncQueryHandler {
    public MyHandler(ContentResolver cr) {
        super(cr);
    }
}

这对我有用。

另外两个可能引起误解的细节:

  • Calendar 类中,月份值是从 0 开始的
  • 要在没有意图的情况下编写日历,您必须将特定权限放入 Manifest 文件中:<uses-permission android:name="android.permission.WRITE_CALENDAR" />

【讨论】:

    猜你喜欢
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 2011-12-02
    • 2010-09-19
    • 1970-01-01
    相关资源
    最近更新 更多