我正在使用PhoneGap(又名Cordova)构建Android应用程序,并且无法使日历集成工作。 免责声明:我是Android和PhoneGap的菜鸟,请耐心等待。
我要做的就是在用户的日历中添加一个事件。在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代码的结果是错误的:
无法找到显式活动类{org.myorg.appname / org.myorg.appname.CalendarPlugin};你有没有在AndroidManifest.xml中声明这个活动?
没有提到在教程中添加AndroidManifest.xml,这让我相信我遗漏了一些东西(同样, CalendarPlugin 代码被成功调用,所以怎么会有一个错误说无法找到 CalendarPlugin 类?)。如果我确实需要将 CalendarPlugin 添加到清单中,我该怎么做呢?
答案 0 :(得分:5)
引用的教程没有涉及意图。您发送数据的意图是您自己的CalendarPlugIn类,这不是您想要的,因为它不处理意图。
有关意图,请参阅http://developer.android.com/guide/topics/intents/intents-filters.html。
此外,如果你在搜索SO,你会发现,直到ICS,甚至没有办法在不使用网络服务的情况下正式向Google日历添加内容。有很多方法可以非正式地进行,但是受到谷歌或ODM本身的影响。
更新:
您应该能够使用Phonegap(通过插件)使用意图。我只是添加了评论,请注意,如果您打算在应用中进行日历集成,那么如果您想支持大多数Android设备,您可能需要做一些研究。如果您有兴趣在ICS中添加日历活动,请查看:http://developer.android.com/reference/android/provider/CalendarContract.html
操作编辑
我只需要修复 Intent 构造函数,这样就可以正常工作了:
Uri uri = Uri.parse("content://com.android.calendar/events");
Intent calIntent = new Intent("android.intent.action.INSERT", uri)
答案 1 :(得分:0)
为使其适用于所有Android sdk版本,请尝试以下代码
Intent intent = new Intent(Intent.ACTION_EDIT);
intent.setType("vnd.android.cursor.item/event");
我试着为我工作。