Phonegap中自定义插件的使用

         在phonegap中需要实现特定相关的功能,可能需要自定义扩展一下功能,那么扩展phonegap组件就成为了可能。

 

源代码结构图:

Phonegap中自定义插件的使用

 

   本文目的在于讲述怎么扩展一个phonegap组件以及实现。

 针对phonegap中activty扩展类:

Java代码   收藏代码
  1. package com.easyway.phonegap.datepicker;  
  2.   
  3. import com.phonegap.*;  
  4. import android.os.Bundle;  
  5. /** 
  6.  * 实现DroidGap的 
  7.  *  
  8.  * @Title:  
  9.  * @Description: 实现 phonegap调用android中datepicker组件 
  10.  * @Copyright:Copyright (c) 2011 
  11.  * @Company:易程科技股份有限公司 
  12.  * @Date:2012-5-4 
  13.  * @author  longgangbai 
  14.  * @version 1.0 
  15.  */  
  16. public class PhonegapDatePluginActivity extends DroidGap {  
  17.     /** Called when the activity is first created. */  
  18.     @Override  
  19.     public void onCreate(Bundle savedInstanceState) {  
  20.         super.onCreate(savedInstanceState);  
  21.         //启动首页  
  22.         super.loadUrl("file:///android_asset/www/index.html");  
  23.     }  
  24. }  

 

 

插件实现类:

Java代码   收藏代码
  1. package com.easyway.phonegap.datepicker;  
  2.   
  3. import java.util.Calendar;  
  4. import org.json.JSONArray;  
  5. import org.json.JSONException;  
  6. import org.json.JSONObject;  
  7.   
  8. import android.app.DatePickerDialog;  
  9. import android.app.DatePickerDialog.OnDateSetListener;  
  10. import android.app.TimePickerDialog;  
  11. import android.app.TimePickerDialog.OnTimeSetListener;  
  12. import android.util.Log;  
  13. import android.widget.DatePicker;  
  14. import android.widget.TimePicker;  
  15.   
  16. import com.phonegap.api.PhonegapActivity;  
  17. import com.phonegap.api.Plugin;  
  18. import com.phonegap.api.PluginResult;  
  19. import com.phonegap.api.PluginResult.Status;  
  20.   
  21. /** 
  22.  *  
  23.  * 实现DroidGap的在phonegap中想采用类似android中时间选择器datepicker 
  24.  *  
  25.  * @Title:  
  26.  * @Description: 实现 phonegap调用android中datepicker组件 
  27.  * @Copyright:Copyright (c) 2011 
  28.  * @Company:易程科技股份有限公司 
  29.  * @Date:2012-5-4 
  30.  * @author  longgangbai 
  31.  * @version 1.0 
  32.  */  
  33. public class DatePickerPlugin extends Plugin {  
  34.   
  35.     private static final String ACTION_DATE = "date";  
  36.     private static final String ACTION_TIME = "time";  
  37.   
  38.     /* 
  39.      * 必须实现这个方法 
  40.      * (non-Javadoc) 
  41.      *  
  42.      * @see com.phonegap.api.Plugin#execute(java.lang.String, 
  43.      * org.json.JSONArray, java.lang.String) 
  44.      */  
  45.     @Override  
  46.     public PluginResult execute(final String action, final JSONArray data,  
  47.             final String callBackId) {  
  48.         Log.d("DatePickerPlugin", "Plugin Called");  
  49.         PluginResult result = null;  
  50.   
  51.         if (ACTION_DATE.equalsIgnoreCase(action)) {  
  52.             Log.d("DatePickerPluginListener execute", ACTION_DATE);  
  53.             this.showDatePicker(callBackId);  
  54.             final PluginResult r = new PluginResult(  
  55.                     PluginResult.Status.NO_RESULT);  
  56.             r.setKeepCallback(true);  
  57.             return r;  
  58.   
  59.         } else if (ACTION_TIME.equalsIgnoreCase(action)) {  
  60.             Log.d("DatePickerPluginListener execute", ACTION_TIME);  
  61.             this.showTimePicker(callBackId);  
  62.             final PluginResult r = new PluginResult(  
  63.                     PluginResult.Status.NO_RESULT);  
  64.             r.setKeepCallback(true);  
  65.             return r;  
  66.   
  67.         } else {  
  68.             result = new PluginResult(Status.INVALID_ACTION);  
  69.             Log.d("DatePickerPlugin", "Invalid action : " + action + " passed");  
  70.         }  
  71.   
  72.         return result;  
  73.     }  
  74.   
  75.     public synchronized void showTimePicker(final String callBackId) {  
  76.         final DatePickerPlugin datePickerPlugin = this;  
  77.         final PhonegapActivity currentCtx = ctx;  
  78.   
  79.         final Runnable runnable = new Runnable() {  
  80.   
  81.             public void run() {  
  82.                 final TimePickerDialog tpd = new TimePickerDialog(currentCtx,  
  83.                         new OnTimeSetListener() {  
  84.   
  85.                             public void onTimeSet(final TimePicker view,  
  86.                                     final int hourOfDay, final int minute) {  
  87.                                 final JSONObject userChoice = new JSONObject();  
  88.                                 try {  
  89.                                     userChoice.put("hour", hourOfDay);  
  90.                                     userChoice.put("min", minute);  
  91.                                 } catch (final JSONException jsonEx) {  
  92.                                     Log.e("showDatePicker",  
  93.                                             "Got JSON Exception "  
  94.                                                     + jsonEx.getMessage());  
  95.                                     datePickerPlugin.error(new PluginResult(  
  96.                                             Status.JSON_EXCEPTION), callBackId);  
  97.                                 }  
  98.                                 datePickerPlugin.success(new PluginResult(  
  99.                                         PluginResult.Status.OK, userChoice),  
  100.                                         callBackId);  
  101.   
  102.                             }  
  103.                         }, 1, 1, true);  
  104.   
  105.                 tpd.show();  
  106.             }  
  107.         };  
  108.         ctx.runOnUiThread(runnable);  
  109.   
  110.     }  
  111.   
  112.     public synchronized void showDatePicker(final String callBackId) {  
  113.   
  114.         final DatePickerPlugin datePickerPlugin = this;  
  115.         final PhonegapActivity currentCtx = ctx;  
  116.         final Calendar c = Calendar.getInstance();  
  117.         final int mYear = c.get(Calendar.YEAR);  
  118.         final int mMonth = c.get(Calendar.MONTH);  
  119.         final int mDay = c.get(Calendar.DAY_OF_MONTH);  
  120.   
  121.         final Runnable runnable = new Runnable() {  
  122.   
  123.             public void run() {  
  124.                 final DatePickerDialog dpd = new DatePickerDialog(currentCtx,  
  125.                         new OnDateSetListener() {  
  126.   
  127.                             public void onDateSet(final DatePicker view,  
  128.                                     final int year, final int monthOfYear,  
  129.                                     final int dayOfMonth) {  
  130.   
  131.                                 final JSONObject userChoice = new JSONObject();  
  132.   
  133.                                 try {  
  134.                                     userChoice.put("year", year);  
  135.                                     userChoice.put("month", monthOfYear);  
  136.                                     userChoice.put("day", dayOfMonth);  
  137.                                 } catch (final JSONException jsonEx) {  
  138.                                     Log.e("showDatePicker",  
  139.                                             "Got JSON Exception "  
  140.                                                     + jsonEx.getMessage());  
  141.                                     datePickerPlugin.error(new PluginResult(  
  142.                                             Status.JSON_EXCEPTION), callBackId);  
  143.                                 }  
  144.   
  145.                                 datePickerPlugin.success(new PluginResult(  
  146.                                         PluginResult.Status.OK, userChoice),  
  147.                                         callBackId);  
  148.   
  149.                             }  
  150.                         }, mYear, mMonth, mDay);  
  151.   
  152.                 dpd.show();  
  153.             }  
  154.         };  
  155.         ctx.runOnUiThread(runnable);  
  156.     }  
  157.   
  158. }  

 

 

phonegap中plugin.xml中配置:

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <plugins>  
  3.     <plugin name="App" value="com.phonegap.App"/>  
  4.     <plugin name="Geolocation" value="com.phonegap.GeoBroker"/>  
  5.     <plugin name="Device" value="com.phonegap.Device"/>  
  6.     <plugin name="Accelerometer" value="com.phonegap.AccelListener"/>  
  7.     <plugin name="Compass" value="com.phonegap.CompassListener"/>  
  8.     <plugin name="Media" value="com.phonegap.AudioHandler"/>  
  9.     <plugin name="Camera" value="com.phonegap.CameraLauncher"/>  
  10.     <plugin name="Contacts" value="com.phonegap.ContactManager"/>  
  11.     <plugin name="Crypto" value="com.phonegap.CryptoHandler"/>  
  12.     <plugin name="File" value="com.phonegap.FileUtils"/>  
  13.     <plugin name="Network Status" value="com.phonegap.NetworkManager"/>  
  14.     <plugin name="Notification" value="com.phonegap.Notification"/>  
  15.     <plugin name="Storage" value="com.phonegap.Storage"/>  
  16.     <plugin name="Temperature" value="com.phonegap.TempListener"/>  
  17.     <plugin name="FileTransfer" value="com.phonegap.FileTransfer"/>  
  18.     <plugin name="Capture" value="com.phonegap.Capture"/>  
  19.     <plugin name="DatePickerPlugin" value="com.easyway.phonegap.datepicker.DatePickerPlugin"/>  
  20. </plugins>  

 

插件对应的js的编写:

Js代码   收藏代码
  1. /** 
  2.  *   
  3.  * @return Object literal singleton instance of DatePicker 
  4.  */  
  5. var DatePicker = function() {  
  6.       
  7. };  
  8.   
  9. DatePicker.prototype.showDateOrTime = function(action,successCallback, failureCallback) {  
  10.      return PhoneGap.exec(   
  11.      successCallback,    //Success callback from the plugin  
  12.      failureCallback,     //Error callback from the plugin  
  13.      'DatePickerPlugin',  //Tell PhoneGap to run "DatePickerPlugin" Plugin  
  14.      action,              //Tell plugin, which action we want to perform  
  15.      []);        //Passing list of args to the plugin  
  16. };  
  17.   
  18. /** 
  19.  * Enregistre une nouvelle bibliothèque de fonctions 
  20.  * auprès de PhoneGap 
  21.  **/  
  22.   
  23. PhoneGap.addConstructor(function() {  
  24.     //如果不支持window.plugins,则创建并设置  
  25.     if(!window.plugins){  
  26.         window.plugins={};  
  27.     }  
  28.     window.plugins.datePickerPlugin=new DatePicker();  
  29.     //向phonegap中注入插件相关的js  
  30.     //Register the javascript plugin with PhoneGap  
  31.     PhoneGap.addPlugin('datePickerPlugin', new DatePicker());  
  32.     //phonegap中注入后台插件相关的java类  
  33.   //Register the native class of plugin with PhoneGap  
  34.     PluginManager.addService("DatePickerPlugin",  
  35.                          "com.easyway.phonegap.datepicker.DatePickerPlugin");  
  36. });  

 

页面调用如下:

Html代码   收藏代码
  1. <!DOCTYPE HTML>  
  2. <html>  
  3.   <head>  
  4.     <meta name="viewport" content="width=320; user-scalable=no" />  
  5.     <meta http-equiv="Content-type" content="text/html; charset=utf-8">  
  6.     <title>Minimal AppLaud App</title>  
  7.     <!-- 加载phonegap -->  
  8.     <script type="text/javascript" charset="utf-8" src="phonegap-1.4.1.js"></script>  
  9.     <!-- 加载jquery -->  
  10.     <script type="text/javascript" charset="utf-8" src="jquery.mobile/jquery-1.6.4.min"></script>  
  11.     <!-- 加载jquerymobile -->  
  12.     <script type="text/javascript" charset="utf-8" src="jquery.mobile/jquery.mobile-1.0.1.js"></script>  
  13.     <!-- 加载自定义插件 -->  
  14.     <script type="text/javascript" charset="utf-8" src="datePickerPlugin.js"></script>  
  15.     <script type="text/javascript" charset="utf-8">  
  16.         
  17.      $(function(){  
  18.         $("#datepicker").click(function(){  
  19.             alert("0000000");  
  20.               window.plugins.datePickerPlugin.showDateOrTime(  
  21.                     'date',  
  22.                     function(r){  
  23.                         document.getElementById("mydatetargetfield").value = r.day + "/" + r.month + "/" + r.year;  
  24.                     },  
  25.                     function(e){console.log(e);}  
  26.                 );  
  27.         });  
  28.      });  
  29. </script>    
  30.   
  31.   </head>  
  32.   <body  class="theme">  
  33.     <input id="mydatetargetfield" type="text" />  
  34.    <input id="datepicker" type="button" value="时间选择器">  
  35.   </body>  
  36. </html>  

 

运行结果如下:

Phonegap中自定义插件的使用

 

你可能感兴趣的:(PhoneGap)