3

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

我找到了这个官方的 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 的解决方法?

4

1 回答 1

0

我有同样的问题。

在文档中,您可以阅读:

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

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

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" />
于 2013-11-15T16:54:46.583 回答