2014-09-02 153 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 
}