注:文章转自:
DatePickerPlugin.java:
package org.apache.cordova;import java.util.Calendar;import org.apache.cordova.api.Plugin;import org.apache.cordova.api.PluginResult;import org.apache.cordova.api.PluginResult.Status;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import android.app.DatePickerDialog;import android.app.DatePickerDialog.OnDateSetListener;import android.app.TimePickerDialog;import android.app.TimePickerDialog.OnTimeSetListener;import android.content.Context;import android.util.Log;import android.widget.DatePicker;import android.widget.TimePicker;public class DatePickerPlugin extends Plugin { private static final String ACTION_DATE = "date"; private static final String ACTION_TIME = "time"; @Override public PluginResult execute(final String action, final JSONArray data, final String callBackId) { Log.d("DatePickerPlugin", "Plugin Called"); PluginResult result = null; if (ACTION_DATE.equalsIgnoreCase(action)) { Log.d("DatePickerPluginListener execute", ACTION_DATE); this.showDatePicker(callBackId); final PluginResult r = new PluginResult( PluginResult.Status.NO_RESULT); r.setKeepCallback(true); return r; } else if (ACTION_TIME.equalsIgnoreCase(action)) { Log.d("DatePickerPluginListener execute", ACTION_TIME); this.showTimePicker(callBackId); final PluginResult r = new PluginResult( PluginResult.Status.NO_RESULT); r.setKeepCallback(true); return r; } else { result = new PluginResult(Status.INVALID_ACTION); Log.d("DatePickerPlugin", "Invalid action : " + action + " passed"); } return result; } public synchronized void showTimePicker(final String callBackId) { final DatePickerPlugin datePickerPlugin = this; final Context currentCtx = cordova.getActivity(); final Runnable runnable = new Runnable() { public void run() { final TimePickerDialog tpd = new TimePickerDialog(currentCtx, new OnTimeSetListener() { public void onTimeSet(final TimePicker view, final int hourOfDay, final int minute) { final JSONObject userChoice = new JSONObject(); try { userChoice.put("hour", hourOfDay); userChoice.put("min", minute); } catch (final JSONException jsonEx) { Log.e("showDatePicker", "Got JSON Exception " + jsonEx.getMessage()); datePickerPlugin.error(new PluginResult( Status.JSON_EXCEPTION), callBackId); } datePickerPlugin.success(new PluginResult( PluginResult.Status.OK, userChoice), callBackId); } }, 1, 1, true); tpd.show(); } }; ctx.runOnUiThread(runnable); } public synchronized void showDatePicker(final String callBackId) { final DatePickerPlugin datePickerPlugin = this; final Context currentCtx = cordova.getActivity(); final Calendar c = Calendar.getInstance(); final int mYear = c.get(Calendar.YEAR); final int mMonth = c.get(Calendar.MONTH); final int mDay = c.get(Calendar.DAY_OF_MONTH); final Runnable runnable = new Runnable() { public void run() { final DatePickerDialog dpd = new DatePickerDialog(currentCtx, new OnDateSetListener() { public void onDateSet(final DatePicker view, final int year, final int monthOfYear, final int dayOfMonth) { final JSONObject userChoice = new JSONObject(); try { userChoice.put("year", year); userChoice.put("month", monthOfYear); userChoice.put("day", dayOfMonth); } catch (final JSONException jsonEx) { Log.e("showDatePicker", "Got JSON Exception " + jsonEx.getMessage()); datePickerPlugin.error(new PluginResult( Status.JSON_EXCEPTION), callBackId); } datePickerPlugin.success(new PluginResult( PluginResult.Status.OK, userChoice), callBackId); } }, mYear, mMonth, mDay); dpd.show(); } }; ctx.runOnUiThread(runnable); }}
在config.xml添加:
phonegap-datePicker.js:
/** * 日期插件 * * @author cjianquan * @since 2014-07-16 * */var DatePicker = function() {};DatePicker.prototype.showDateOrTime = function(action, successCallback, failureCallback) { return PhoneGap.exec(successCallback, // Success callback from the plugin failureCallback, // Error callback from the plugin 'DatePickerPlugin', // Tell PhoneGap to run "DatePickerPlugin" Plugin action, // Tell plugin, which action we want to perform []); // Passing list of args to the plugin};/** * Enregistre une nouvelle bibliothèque de fonctions auprès de PhoneGap */PhoneGap.addConstructor(function() { // 如果不支持window.plugins,则创建并设置 if (!window.plugins) { window.plugins = {}; } window.plugins.datePickerPlugin = new DatePicker(); // 向phonegap中注入插件相关的js // Register the javascript plugin with PhoneGap PhoneGap.addPlugin('datePickerPlugin', new DatePicker()); // phonegap中注入后台插件相关的java类 // Register the native class of plugin with PhoneGap PluginManager.addService("DatePickerPlugin", "org.apache.cordova.DatePickerPlugin");});在html页面中: