2014-09-02 150 views
6

我开发了一个提示日历应用程序编辑事件的Android应用程序。Android日历:onActivityResult的resultCode始终为0

我用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.

此外我需要从日历intent中取回数据。但onActivityResult中的intent“data”也返回null。

任何人都可以解释为什么会发生?有什么方法可以知道用户点击“保存”还是“取消”?

+1

是旨在返回值的日历?如果不是,它将始终返回0. – TomTsagk 2014-09-02 03:20:10

+0

我不认为Android(Google)日历将返回任何结果,至少它未在[日历提供程序]中指定(http://developer.android.com/guide/topics/提供商/日历provider.html)。 – 2014-09-02 03:27:50

+0

如果是这样,Android的日历提供程序是否提供任何方法来知道用户是否单击保存日历或取消? – Sam35 2014-09-02 03:35:49

回答

0

您可以检查新添加的日历事件的lastId,如果没有改变,那么结果实际上是取消了,否则就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 
}