4

我使用PhoneGap(aka Cordova)構建Android應用程序,並且無法使日曆集成工作。 聲明:我是Android和PhoneGap的小菜鳥,請耐心等待。PhoneGap /科爾多瓦日曆集成(Android)

我想要做的就是將一個事件添加到用戶的日曆。在this tutorial之後,我創建了一個試圖啓動Calendar Intent的插件。代碼如下所示:

public class CalendarPlugin extends Plugin { 
public static final String NATIVE_ACTION_STRING="addToCalendar"; 
public static final String SUCCESS_PARAMETER="success"; 

@Override 
public PluginResult execute(String action, JSONArray data, String callbackId) { 
    if (NATIVE_ACTION_STRING.equals(action)) { 
     Calendar beginTime = Calendar.getInstance(); 
     beginTime.set(2012, 6, 19, 7, 30); 
     Calendar endTime = Calendar.getInstance(); 
     endTime.set(2012, 6, 19, 8, 30); 

     Intent calIntent = new Intent((Context) this.ctx, CalendarPlugin.class) 
      .setAction(Intent.ACTION_INSERT) 
      .putExtra(Events.TITLE, "A new event") 
      .putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, true) 
      .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis()) 
      .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis()); 

     this.ctx.startActivity(calIntent); 
     return new PluginResult(PluginResult.Status.OK, "Smashing success"); 
    } 

return new PluginResult(PluginResult.Status.ERROR, "Didn't work bro"); 
} 
} 

的JavaScript代碼來調用這個插件標準:

var CalendarPlugin = { 
    callNativeFunction: function (success, fail, resultType) { 
     if (cordova) { 
      return cordova.exec(success, fail, 
       "org.myorg.appname.CalendarPlugin", 
       "addToCalendar", [resultType]); 
     } 
     else { 
      alert("Calendar function is not available here."); 
     } 
    } 
}; 

Android的代碼是越來越調用(使用斷點確認)。但是,發回Javascript代碼的結果是一個錯誤:

Unable to find explicit activity class {org.myorg.appname/org.myorg.appname.CalendarPlugin}; have you declared this activity in your AndroidManifest.xml?

有沒有提到在本教程中,這使我相信,我失去了一些東西(也加入AndroidManifest.xml中時,CalendarPlugin代碼被調用成功,那麼如何能有一個錯誤說CalendarPlugin類無法找到?)。如果確實需要將CalendarPlugin添加到清單中,我將如何去做這件事?

回答

5

引用的教程沒有涵蓋意圖。您發送數據的目的是您自己的CalendarPlugIn類,這不是您想要的,因爲它不處理意圖。

查看http://developer.android.com/guide/topics/intents/intents-filters.html關於意圖。

此外,如果你圍繞SO搜索,你會發現,直到ICS,甚至沒有一種方法可以在沒有使用Web服務的情況下正式向Google日曆添加內容。有些方法可能會非正式地做到這一點,但受到Google或ODM自身的突發事件的影響。

更新時間:

你應該能夠(通過插件)使用意圖與PhoneGap的。我只添加了評論,指出如果你打算在你的應用中進行日曆整合,如果你想支持大多數Android設備,你可能需要做一些研究。如果你有興趣在ICS添加日曆事件看:http://developer.android.com/reference/android/provider/CalendarContract.html

作品的編輯

我只需要修復意圖構造,這和預期一樣:

Uri uri = Uri.parse("content://com.android.calendar/events"); 
Intent calIntent = new Intent("android.intent.action.INSERT", uri) 
+0

那麼你認爲我的方法在ICS及以上版本上甚至可行嗎?是否可以使用來自Phonegap插件的Intents? – McGarnagle

+0

@dbaseman查看我的更新回答 –

+0

謝謝你關於意圖的觀點指出了我的正確方向。 (另外,我希望你不介意,我只是修正了你的答案完整性。) – McGarnagle

0

爲了使它適用於所有android sdk版本,請嘗試以下代碼

Intent intent = new Intent(Intent.ACTION_EDIT); 
intent.setType("vnd.android.cursor.item/event"); 

我嘗試過爲我工作。