【问题标题】:Android Calendar: onActivityResult's resultCode is always 0Android 日历:onActivityResult 的 resultCode 始终为 0
【发布时间】:2014-09-02 03:12:56
【问题描述】:

我开发了一个 Android 应用程序,它会提示日历应用程序编辑事件。

我使用startActivityForResult() 打开日历。编辑并保存事件后,resultCodeonActivityResult() 中始终为 0。

我看到很多与“onActivityResult resultCode 总是返回 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 中的意图“数据”也返回 null。

谁能解释为什么会这样?有什么方法可以知道用户是点击“保存”还是“取消”?

【问题讨论】:

  • 日历是否设计为返回值?如果不是,它将始终返回 0。
  • 我认为 Android (Google) 日历不会返回任何结果,至少在 Calendar Provider 中没有指定。
  • 如果是,Android日历提供者是否提供任何方法来知道用户点击保存日历还是取消?
  • 暂时忽略resultCode。你有任何Intent data 回复吗? if(data != null) 是否返回 true?你能从中得到data.getExtras()?bundle吗?打印到logcat,里面有什么?
  • "data" 总是返回 null。在 logcat 中显示以下 Log。 " 在看到事件光标之前,无法使用日历光标更新模型。"

标签: android android-intent android-activity android-calendar


【解决方案1】:

可以查看新增日历事件的lastId,如果没有变化,则result实际为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
}

【讨论】:

    猜你喜欢
    • 2018-04-08
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    相关资源
    最近更新 更多