添加自定义日历事件 - Phonegap Android插件

3
以下是我的CalendarEventPlugin.js文件:
window.addcalendareventplugin = function(startDate, endDate, allDay, successCallback){     
//call the Plugin execute method()
console.log(successCallback,function(err){
callback('Error: ' + err);      
},"CalendarEventPlugin","addCalendarEvent",[startDate, endDate, allDay]); 
}

我正在使用cordova-2.5.0和Android 2.2及以上版本。

以下是我的CalendarEventPlugin.java文件:

package org.apache.cordova.plugin;

import java.util.Calendar;
import org.json.JSONArray;
import org.json.JSONException;
import org.apache.cordova.api.CallbackContext;
import org.apache.cordova.api.CordovaPlugin;

import android.content.Intent;
import android.provider.CalendarContract;
import android.provider.CalendarContract.Events;

public class CalendarEventPlugin extends CordovaPlugin {        
    @Override       
    public boolean execute(String action, JSONArray data, CallbackContext callbackContext) throws JSONException {           
            if (action.equals("addCalendarEvent")) {
                    if(data.length() > 0)
                    {
                            //if you are passing some data eg. start,end date, all day and parameters for the Calendar
                            //from plugin's javascript interface then you can retrieve and parse the data from data[] here. 
                           String startDate = data.getString(0);
                    String endDate = data.getString(1);
                    boolean allDay = data.getBoolean(2);                                                        
                            if(this.addCalendarEvent())
                            {
                                    callbackContext.success("Done!!");
                            }
                            else
                            {
                                    callbackContext.error("Error!!");
                            }
                    }                       
                    return true;
            }
            return false;
    }       

    private boolean addCalendarEvent(){     
            Boolean ret = false;
            try{
                    Calendar beginTime = Calendar.getInstance(); //the begin time and end time can come from javascript if user enters this values in a form
            beginTime.set(2013, 1, 20, 7, 30);
            Calendar endTime = Calendar.getInstance();
            endTime.set(2013, 1, 20, 8, 30); //set your own time here and above as well or you can get the current time.

            Intent intent = new Intent(Intent.ACTION_EDIT);
            intent.setType("vnd.android.cursor.item/event");
            intent.setAction(Intent.ACTION_INSERT);
            intent.putExtra(Events.TITLE, "A new event"); //can come from javascript.
            intent.putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, true);
            intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis());
            intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis());

            this.cordova.startActivityForResult(this, intent, 0);

            ret = true;
            }
            catch(Exception e){
                    e.printStackTrace();
                    ret = false;
            }
            return ret;
    }       
   }

以下是我的索引文件:
     <!DOCTYPE HTML>
     <html>
     <head>
     <title>Cordova</title>
     <script type="text/javascript" charset="utf-8" src="cordova-2.5.0.js"></script>
     <script type="text/javascript" charset="utf-8" src="CalenderEventPlugin.js">           </script>
     <script type="text/javascript" charset="utf-8" src="app.js"></script>
     </head>
     <body>
     <h4>Custom Plugin Development</h4>
     <button onclick="test5()">Calendar Event Plugin</button>

     <br/>
     </body>
     </html>

以下是我的app.js文件:
    function test5(){
//alert("call of app js file");
    window.addcalendareventplugin("2015-09-09T16:00:00-06:00", "2015-09-09T18:00:00-06:00","true",function(val){
    alert(val);   //once success message come and you have tested it, you can remove this alert.
    });
  }

我无法调用addCalenderEvent方法,出现了JSON错误。 请问能否帮忙解决? 谢谢!

1个回答

0

JS代码应该长这样:

window.addcalendareventplugin = function(startDate, endDate, allDay, successCallback){     
    //call the Plugin execute method()
    cordova.exec(successCallback,function(err){
        console.log('Error: ' + err);      
    },"CalendarEventPlugin","addCalendarEvent",[startDate, endDate, allDay]); 
}

而Java代码应该长这样:

package org.apache.cordova.plugin;

import java.util.Calendar;
import org.json.JSONArray;
import org.json.JSONException;
import org.apache.cordova.api.CallbackContext;
import org.apache.cordova.api.CordovaPlugin;

import android.content.Intent;
import android.provider.CalendarContract;
import android.provider.CalendarContract.Events;

public class CalendarEventPlugin extends CordovaPlugin {        
@Override       
public boolean execute(String action, JSONArray data, CallbackContext callbackContext) throws JSONException {           
        if (action.equals("addCalendarEvent")) {
                if(data.length() > 0)
                {
                        //if you are passing some data eg. start,end date, all day and parameters for the Calendar
                        //from plugin's javascript interface then you can retrieve and parse the data from data[] here.                                                         
                        String startDate = data.getString(0);
                        String endDate = data.getString(1);
                        String allDay = data.getBoolean(2);
                        if(this.addCalendarEvent())
                        {
                                callbackContext.success("Done!!");
                        }
                        else
                        {
                                callbackContext.error("Error!!");
                        }
                }                       
                return true;
        }
        return false;
}       

private boolean addCalendarEvent(){     
        Boolean ret = false;
        try{
                Calendar beginTime = Calendar.getInstance(); //the begin time and end time can come from javascript if user enters this values in a form
        beginTime.set(2013, 1, 20, 7, 30);
        Calendar endTime = Calendar.getInstance();
        endTime.set(2013, 1, 20, 8, 30); //set your own time here and above as well or you can get the current time.

        Intent intent = new Intent(Intent.ACTION_EDIT);
        intent.setType("vnd.android.cursor.item/event");
        intent.setAction(Intent.ACTION_INSERT);
        intent.putExtra(Events.TITLE, "A new event"); //can come from javascript.
        intent.putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, true);
        intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis());
        intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis());

        this.cordova.startActivityForResult(this, intent, 0);

        ret = true;
        }
        catch(Exception e){
                e.printStackTrace();
                ret = false;
        }
        return ret;
}       
}

我正在使用Cordova 2.5.0版本,但是遇到了一个错误:ReferenceError: 找不到变量:callback,位于file://android_asset/WWW/cordova-2.5.0.js的第970行。 - Surya
抱歉,我已经修复了JS代码中的错误。这就是当你试图在文本字段中编写代码时会发生的事情。 - Simon MacDonald
callback('Error: ' + err); 更改为 console.log('Error: ' + err); 后,我收到了错误消息:Error: JSON error at file:///android_asset/www/CalenderEventPlugin.js:4 :( - Surya
那个文件的第四行是什么? - Simon MacDonald
你需要调试Java中的addCalendarEvent方法。 - Simon MacDonald
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接