ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

PhoneGap / Cordova日历集成(Android)

2019-06-21 00:13:40  阅读:283  来源: 互联网

标签:android android-intent cordova phonegap-plugins android-calendar


我正在使用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代码是一个错误:

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添加到清单中,我该怎么做呢?

解决方法:

引用的教程没有涉及意图.您发送数据的意图是您自己的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

Op的编辑

我只需要修复Intent构造函数,这按预期工作:

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

标签:android,android-intent,cordova,phonegap-plugins,android-calendar
来源: https://codeday.me/bug/20190620/1249467.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有