安卓日历:onActivityResult的resultCode总是0

7
我开发了一个Android应用程序,可以提示日历应用程序编辑事件。 我使用startActivityForResult()打开日历。在编辑并保存事件后,在onActivityResult()中,resultCode始终为0。 我看到许多与“onActivityResult resultCode always returns 0”相关的答案。这是因为第二个活动中没有使用setResult()finish()。 但在我的情况下,我正在调用Android日历应用程序(而不是自定义活动)。 促使Android日历的代码:
Intent intent = new Intent(Intent.ACTION_EDIT);
intent.setType("vnd.android.cursor.item/event");
//set the event details
startActivityForResult(intent,1);

在日历被保存或取消时触发。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    //resultCode always returns 0.
    switch(requestCode) {
    case 1: 
        if (resultCode == Activity.RESULT_OK) 
        {

        }
    }
}

无论我在日历应用中点击“保存”或“取消”,resultCode始终为0。
此外,我需要从日历意图中获取数据。但是,在onActivityResult中的意图“data”也返回null。
有人能解释一下为什么会发生这种情况吗?是否有办法知道用户是否点击了“保存”或“取消”?

1
日历是否被设计为返回一个值?如果不是,它将始终返回0。 - TomTsagk
我认为Android (Google)日历不会返回任何结果,至少在Calendar Provider中没有指定。 - Andrew T.
如果是这样的话,Android日历提供程序是否提供任何方法来知道用户是否单击保存日历或取消? - Devshan
暂时忽略resultCode,你有收到任何Intent data吗? if(data != null) 返回true了吗?你能从中获取data.getExtras()bundle吗?将其打印到Logcat中,其中包含什么? - nightfixed
"data" 总是返回 null。在 logcat 中显示以下日志:"在看到事件游标之前,无法使用日历游标更新模型。" - Devshan
1个回答

4

您可以检查新添加的日历事件的lastId,如果它没有改变,则结果实际上是CANCELLED,否则它是OK。

val projection = arrayOf(CalendarContract.Calendars._ID)
cursor = contentResolver.query(CalendarContract.Events.CONTENT_URI, projection, null, null, null)
if (cursor.moveToLast()) {
    val lastId = cursor.getLong(0)
    // compare lastId with a previous one, if not changed - result is CANCELLED
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接