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

时间:2013-04-02 12:11:32

标签: android cordova phonegap-plugins android-calendar

下面是我的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 :(得分: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;
}       
}