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

问题描述:

下面是我的CalendarEventPlugin.js文件:添加自定义日历事件 - PhoneGap的Android插件

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]); 
} 

进出口使用科尔多瓦-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错误.. 任何人都可以请帮忙。 在此先感谢.. :)

的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; 
}  
} 
+0

我使用的科尔多瓦2.5.0,我得到的ReferenceError :找不到变量:callback at file://android_asset/WWW/cordova-2.5.0.js:970 – Surya

+0

哎呀抱歉,我修正了JS代码中的错误。当您尝试在文本字段中编写代码时会发生这种情况。 –

+0

将**回调('Error:'+ err); **改为** console.log('Error:'+ err); **我在文件中获取错误:JSON错误:/// android_asset/www /CalenderEventPlugin.js:4 :( – Surya