引言
Cordova(PhoneGap)采用的是HTML5+JavaScript混合模式來開 發移動手機APP,是以當頁面需要擷取手機内部某些資訊時(例如:聯系人資訊,坐标定位,短信等),程式就需要調用手機内部的API跟頁面進行資訊交換。 Cordova 特别為此定制了完善的解決方案,以友善使用者進行程式編輯。在這一章裡将為大家逐一介紹Cordova與Actitity通訊的實作原理。
目錄
<a href="http://www.cnblogs.com/#p1" target="_blank">一、CordovaPlugin類簡介</a>
<a href="http://www.cnblogs.com/#p2" target="_blank">二、頁面通過 cordova.exec 函數調用 CordovaPlugin 插件</a>
<a href="http://www.cnblogs.com/#p3" target="_blank">三、CordovaInterface接口說明</a>
<a href="http://www.cnblogs.com/#p4" target="_blank">四、頁面通過CordovaPlugin插件調用Activity開發執行個體</a>
一、CordovaPlugin類簡介
CordovaPlugin是Cordova插件的父類,使用者自定義的插件必須繼承父類,它的主要常用屬性如下
屬性
詳細說明
CordovaWebView
視圖管理器,當中包括PluginManager、CordovaWebViewEngine、ICordovaCookieManager等多個對象,用于管理界面渲染,視圖加載過程中的生命周期
CordovaInterface
定義startActivityForResult、setActivityResultCallback等主要方法,擷取調用上下文中的Activity對象
CordovaPreferences
用于管理bundle中的屬性值
表格1.1
CordovaPlugin的常用方法如下
方法
void privateInitialize(String serviceName, CordovaInterface cordova, CordovaWebView webView, CordovaPreferences preferences)
插件初始化時執行,用于定義service名稱,cordovaInterface接口,CodovaWebView視圖,CordovaPreferences 屬性等值
boolean execute(String action, String rawArgs, CallbackContext callbackContext)
在開發插件時,使用者的自定義方法,當頁面調用插件時系統首先将會運作此方法
boolean execute(String action, JSONArray args, CallbackContext callbackContext)
同上
boolean execute(String action, CordovaArgs args, CallbackContext callbackContext)
void onActivityResult(int requestCode, int resultCode, Intent intent)
在開發插件時,使用者的自定義方法,插件調用startActivityForResult後的回調函數。
String getServiceName()
擷取在config檔案中該服務的名稱
Boolean shouldAllowRequest(String url)
判斷是否允許此請求
Boolean shouldAllowNavigation(String url)
判斷是否允許此導航
Boolean shouldOpenExternalUrl(String url)
判斷是否打開外部連結
boolean onReceivedHttpAuthRequest(CordovaWebView view, ICordovaHttpAuthHandler handler, String host, String realm)
boolean onReceivedClientCertRequest(CordovaWebView view, ICordovaClientCertRequest request)
表格1.2
CordovaPlugin的詳細解析可參考官網
<a href="http://cordova.apache.org/docs/en/3.4.0/guide_hybrid_plugins_index.md.html#Plugin%20Development%20Guide" target="_blank">http://cordova.apache.org/docs/en/3.4.0/guide_hybrid_plugins_index.md.html#Plugin%20Development%20Guide</a>
<a href="http://www.cnblogs.com/#p0" target="_blank">回到目錄</a>
二、頁面調用 CordovaPlugin 插件執行個體
大概了解 CordovaPlugin 類的使用方法後,下面為大家介紹一下頁面調用插件的例子。首先打開檔案res/xml/config.xml為插件進行配置。
<preference/>可用于運作環境中的常用參數,例如:全屏設定,滾動條設定,背景色設定等等
<preference name="Fullscreen" value="true" />
<preference name="DisallowOverscroll" value="true"/>
<preference name="BackgroundColor" value="0xff0000ff"/>
<feature></feature>節點用于設定插件描述,feature的name屬性是設定插件的唯一标示,在頁面調用插件時将通過name找到此插件
在開發插件時,先為此插件添加一個<feature>節點,在<param>中綁定插件的背景執行檔案ShowMessagePlugin.java
<param name="android-package" value="org.apache.cordova.showmessage.ShowMessagePlugin" />
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<code><?</code><code>xml</code> <code>version</code><code>=</code><code>'1.0'</code> <code>encoding</code><code>=</code><code>'utf-8'</code><code>?></code>
<code><</code><code>widget</code> <code>id</code><code>=</code><code>"com.sun.androidapp"</code> <code>version</code><code>=</code><code>"0.0.1"</code> <code>xmlns</code><code>=</code><code>"http://www.w3.org/ns/widgets"</code> <code>xmlns:cdv</code><code>=</code><code>"http://cordova.apache.org/ns/1.0"</code><code>></code>
<code> </code><code><!--設定運作環境中的參數值 --></code>
<code> </code><code><</code><code>preference</code> <code>name</code><code>=</code><code>"loglevel"</code> <code>value</code><code>=</code><code>"DEBUG"</code> <code>/></code>
<code> </code><code><!-- 插件描述 --></code>
<code> </code><code><</code><code>feature</code> <code>name</code><code>=</code><code>"Whitelist"</code><code>></code>
<code> </code><code><</code><code>param</code> <code>name</code><code>=</code><code>"android-package"</code> <code>value</code><code>=</code><code>"org.apache.cordova.whitelist.WhitelistPlugin"</code> <code>/></code>
<code> </code><code><</code><code>param</code> <code>name</code><code>=</code><code>"onload"</code> <code>value</code><code>=</code><code>"true"</code> <code>/></code>
<code> </code><code></</code><code>feature</code><code>></code>
<code> </code><code><</code><code>feature</code> <code>name</code><code>=</code><code>"ShowMessage"</code><code>></code>
<code> </code><code><</code><code>param</code> <code>name</code><code>=</code><code>"android-package"</code> <code>value</code><code>=</code><code>"org.apache.cordova.showmessage.ShowMessagePlugin"</code> <code>/></code>
<code> </code><code><</code><code>allow-intent</code> <code>href</code><code>=</code><code>"market:*"</code> <code>/></code>
<code> </code><code><!-- 該APP名稱 --></code>
<code> </code><code><</code><code>name</code><code>>AndroidTest</</code><code>name</code><code>></code>
<code> </code><code><!-- APP描述 --></code>
<code> </code><code><</code><code>description</code><code>></code>
<code> </code><code>A sample Apache Cordova application that responds to the deviceready event.</code>
<code> </code><code></</code><code>description</code><code>></code>
<code> </code><code><!-- 作者資訊描述 --></code>
<code> </code><code><</code><code>author</code> <code>email</code><code>=</code><code>"[email protected]"</code> <code>href</code><code>=</code><code>"http://cordova.io"</code><code>></code>
<code> </code><code>Apache Cordova Team</code>
<code> </code><code></</code><code>author</code><code>></code>
<code> </code><code><!-- 預設啟動頁面 --></code>
<code> </code><code><</code><code>content</code> <code>src</code><code>=</code><code>"index.html"</code> <code>/></code>
<code> </code><code><!-- 指定app可進行通信的域名,*為所有 --></code>
<code> </code><code><</code><code>access</code> <code>origin</code><code>=</code><code>"*"</code> <code>/></code>
<code> </code><code><!-- App預設隻請允許通過手機端直接打開,若想通過網站,SMS等方式調用APP,則需要設定allow-intent配置 --></code>
<code> </code><code><</code><code>allow-intent</code> <code>href</code><code>=</code><code>"http://*/*"</code> <code>/></code>
<code> </code><code><</code><code>allow-intent</code> <code>href</code><code>=</code><code>"https://*/*"</code> <code>/></code>
<code> </code><code><</code><code>allow-intent</code> <code>href</code><code>=</code><code>"tel:*"</code> <code>/></code>
<code> </code><code><</code><code>allow-intent</code> <code>href</code><code>=</code><code>"sms:*"</code> <code>/></code>
<code> </code><code><</code><code>allow-intent</code> <code>href</code><code>=</code><code>"mailto:*"</code> <code>/></code>
<code> </code><code><</code><code>allow-intent</code> <code>href</code><code>=</code><code>"geo:*"</code> <code>/></code>
<code></</code><code>widget</code><code>></code>
建立org.apache.cordova.showmessage.ShowMessagePlugin類,且繼承CordovaPlugin基類,并實作
bool execute(action,args,callbackcontext) 方法。當頁面調用此插件時,預設執行此方法。
action 是唯一辨別符,系統可根據不同的action進行不同的操作。
args是頁面傳入的參數,支援String, JsonArray,CordovaArgs 等三種不同的類型。
callbackcontext是系統的上下文,當完成操作後調用callbackcontext.success(支援多類型參數)方法,表示插件操作已完成,并把參數返還到頁面。最終傳回true代表插件執行成功,false代表執行失敗
<code>package</code> <code>org.apache.cordova.showmessage;</code>
<code>public</code> <code>class</code> <code>ShowMessagePlugin </code><code>extends</code> <code>CordovaPlugin {</code>
<code> </code><code>@Override</code>
<code> </code><code>public</code> <code>boolean</code> <code>execute(String action,JSONArray args,CallbackContext context) </code>
<code> </code><code>throws</code> <code>JSONException{ </code>
<code> </code><code>if</code><code>(action.equals(</code><code>"mydream"</code><code>)){</code>
<code> </code><code>String msg=args.getString(</code><code>0</code><code>)+</code><code>"'s dream is to become a "</code><code>+args.getString(</code><code>1</code><code>);</code>
<code> </code><code>context.success(msg);</code>
<code> </code><code>return</code> <code>true</code><code>;</code>
<code> </code><code>}</code>
<code> </code><code>return</code> <code>false</code><code>;</code>
<code> </code><code>}</code>
<code>}</code>
在 cordova.js 包中,最常用的是 cordova.exec(success,failed,service,action,args)函數,頁面正是通過此函數調用插件。
success 用于綁定插件執行成功後回調的回調函數
failed用于綁定執行失敗的回調函數
service與config.xml配置檔案中feature位元組的name屬性相對應
action與ShowMessagePlugin對象boolean excute方法中action參數對應,用于分辨插件執行的方法類型,插件可根據action類型的不同作出分類處理。
args為輸入參數
<code>Name: <</code><code>input</code> <code>type</code><code>=</code><code>"text"</code> <code>id</code><code>=</code><code>"txt1"</code><code>/>&nbsp;&nbsp;&nbsp;&nbsp;</code>
<code> </code><code>Dream:<</code><code>input</code> <code>type</code><code>=</code><code>"text"</code> <code>id</code><code>=</code><code>"txt2"</code><code>/>&nbsp;&nbsp;&nbsp;&nbsp;</code>
<code> </code><code><</code><code>input</code> <code>type</code><code>=</code><code>"button"</code> <code>onclick</code><code>=</code><code>"btnclick()"</code> <code>name</code><code>=</code><code>"btn"</code> <code>value</code><code>=</code><code>"Click"</code><code>/> <</code><code>br</code><code>/></code>
<code> </code><code><</code><code>label</code> <code>id</code><code>=</code><code>"label"</code><code>></</code><code>label</code><code>> </code>
<code> </code>
<code> </code><code><</code><code>script</code> <code>type</code><code>=</code><code>"text/javascript"</code><code>></code>
<code> </code><code>function btnclick(){</code>
<code> </code><code>var name=$("#txt1").val();</code>
<code> </code><code>var dream=$("#txt2").val();</code>
<code> </code><code>//通過 cordova.exec (success,failed,serviceName,action,args)函數調用插件</code>
<code> </code><code>cordova.exec(success,failed,"ShowMessage","mydream",[name,dream])</code>
<code> </code><code>}</code>
<code> </code><code>//成功調用插件,擷取傳回值後的頁面處理函數 </code>
<code> </code><code>function success(result){</code>
<code> </code><code>if(result!=null)</code>
<code> </code><code>$("#label").html(result);</code>
<code> </code><code>else</code>
<code> </code><code>alert("no message");</code>
<code> </code><code>//調用失敗後的處理函數</code>
<code> </code><code>function failed(msg){</code>
<code> </code><code>......</code>
<code> </code><code></</code><code>script</code><code>></code>
測試結果

三、CordovaInterface接口說明
CordovaInterface 接口預設是由 CordovaInterfaceImpl 類實作的,當中包括了一個Activity對象。當打開APP時 Cordova 會預設啟動此 Activity 以承載 Cordova 核心引擎對程式進行管理。ExecutorService 則負責對象對線程池進行管理,PluginManager則負責對插件進行管理,CordovaPlugin則是Cordova插件的父類,所有插件都必須繼承CordovaPlugin。
Activity
打開APP時 Cordova 會預設啟動此 Activity 以承載 Cordova 核心引擎對程式進行管理
ExecutorService
對線程池進行管理
PluginManager
插件管理器,用于管理插件的生成,運作,結束等生命周期
CordovaPlugin
通過startActivityForResult方法綁定CordovaPlugin插件
ActivityResultHolder
内部類,封裝了requestCode, resultCode, intent等對象
表格2.1
CordovaInterfaceImpl定義了三個最常用方法
void startActivityForResult(CordovaPlugin command, Intent intent, int requestCode)
綁定CordovaPlugin參數,并調用Activity對象的startActivityForResult(intent, requestCode)方法,根據 intent 綁定值跳轉到對應的activity
void setActivityResultCallback(CordovaPlugin plugin)
激發CordovaPlugin對象的onActivityResult事件
boolean onActivityResult(int requestCode, int resultCode, Intent intent)
封裝Acticity對象的onActivityResult回調函數, 激發CordovaPlugin對象的onActivityResult事件
表格2.2
<a></a>
四、頁面通過CordovaPlugin插件調用Activity開發執行個體
類似于第一節執行個體,在頁面通過cordova.exec(success,failed,service,action,args)方法調用插件,傳回時調用success函數進行處理顯示結果
<code>出遊省份: </code>
<code> </code><code><</code><code>select</code> <code>id</code><code>=</code><code>"select1"</code><code>></code>
<code> </code><code><</code><code>option</code> <code>value</code><code>=</code><code>'1'</code> <code>selected</code><code>=</code><code>'selected'</code><code>>黑龍江</</code><code>option</code><code>></code>
<code> </code><code><</code><code>option</code> <code>value</code><code>=</code><code>'2'</code><code>>吉林</</code><code>option</code><code>></code>
<code> </code><code><</code><code>option</code> <code>value</code><code>=</code><code>'3'</code><code>>遼甯</</code><code>option</code><code>></code>
<code> </code><code></</code><code>select</code><code>></code>
<code> </code><code><</code><code>input</code> <code>type</code><code>=</code><code>"button"</code> <code>onclick</code><code>=</code><code>"btnclick()"</code> <code>name</code><code>=</code><code>"btn"</code> <code>value</code><code>=</code><code>"查找"</code><code>/> <</code><code>br</code><code>/></code>
<code> </code><code>路線景點:</code>
<code> </code><code><</code><code>label</code> <code>id</code><code>=</code><code>"label"</code><code>></</code><code>label</code><code>><</code><code>br</code><code>/> </code>
<code> </code><code>var province=$("#select1").val();</code>
<code> </code><code>//通過 cordova.exec (success,failed,serviceName,actionName,args)函數調用插件</code>
<code> </code><code>cordova.exec(success,null,"ShowMessage","showMessage",[province]);</code>
插 件通過判斷action參數判斷進行不同的處理,然後通過Intent對象綁定将要啟動的Activity,最後通過CordovaInterface中 的startActivityForResult(cordovaPlugin,intent,int)方法啟動該Activity。當 Activity 結束後,系統将調用回調函數 onActivityResult(int requestCode, int resultCode, Intent intent)
在此說明一下Intent類的用途,此類主要用于綁定目前的活動與子活動之間關系,當中包含6種構造函數。
1、Intent() 空構造函數
2、Intent(Intent o) 拷貝構造函數
3、Intent(String action) 指定action類型的構造函數
4、Intent(String action, Uri uri) 指定Action類型和Uri的構造函數,URI主要是結合程式之間的資料共享ContentProvider
5、Intent(Context packageContext, Class<?> cls) 傳入元件的構造函數,也就是此例子中使用到的
6、Intent(String action, Uri uri, Context packageContext, Class<?> cls) 前兩種結合體
Intent 類中封裝了一個Bundle 對象 mExtras,可用于主活動與子活動之間傳值,系統可通過 putExtra 方法把參數傳入mExtras, 也可通過 getShortExtra、getIntExtra、getBooleanExtra、getByteExtra 等多個方法從mExtras 擷取參數值。
<code> </code><code>private</code> <code>CallbackContext context;</code>
<code> </code>
<code> </code><code>public</code> <code>boolean</code> <code>execute(String action,JSONArray args,CallbackContext context)</code>
<code> </code><code>throws</code> <code>JSONException{</code>
<code> </code><code>this</code><code>.context=context;</code>
<code> </code><code>//根據action判斷調用方法</code>
<code> </code><code>if</code><code>(action.equals(</code><code>"showMessage"</code><code>)){</code>
<code> </code><code>//通過Intent綁定将要調用的Activity</code>
<code> </code><code>Intent intent=</code><code>new</code> <code>Intent(</code><code>this</code><code>.cordova.getActivity(),SpotActivity.</code><code>class</code><code>);</code>
<code> </code><code>//加入将要傳輸到activity中的參數</code>
<code> </code><code>intent.putExtra(</code><code>"province"</code><code>, args.getString(</code><code>0</code><code>));</code>
<code> </code><code>//啟動activity</code>
<code> </code><code>this</code><code>.cordova.startActivityForResult(</code><code>this</code><code>, intent, </code><code>0</code><code>);</code>
<code> </code><code>return</code> <code>true</code><code>;</code>
<code> </code><code>public</code> <code>void</code> <code>onActivityResult(</code><code>int</code> <code>requestCode, </code><code>int</code> <code>resultCode, Intent intent) {</code>
<code> </code><code>// 根據resultCode判斷處理結果</code>
<code> </code><code>if</code><code>(resultCode==Activity.RESULT_OK){</code>
<code> </code><code>String spot=intent.getStringExtra(</code><code>"spot"</code><code>);</code>
<code> </code><code>context.success(spot);</code>
Activity 被觸發後先通過 setContentView 方法綁定視圖,再從intent 對象中擷取輸入參數進行處理。
完成操作後,通過 Activity 類 setResult(int resultCode, Intent data) 方法綁定傳回值,其中resultCode可被 cordovaPlugin 插件用作判斷傳回值的處理結果。
最後調用 Activity 對象的 finish 方法關閉 SpotActivity,把傳回值回傳到 CordovaPlugin。
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<code>public</code> <code>class</code> <code>SpotActivity </code><code>extends</code> <code>Activity{</code>
<code> </code><code>private</code> <code>CheckBox chk1,chk2,chk3;</code>
<code> </code><code>public</code> <code>void</code> <code>onCreate(Bundle savedInstanceState){</code>
<code> </code><code>super</code><code>.onCreate(savedInstanceState);</code>
<code> </code><code>//綁定視圖</code>
<code> </code><code>setContentView(R.layout.goods_list);</code>
<code> </code><code>//從intent中擷取輸入參數</code>
<code> </code><code>Integer province=Integer.parseInt(</code><code>this</code><code>.getIntent().getStringExtra(</code><code>"province"</code><code>));</code>
<code> </code><code>setSpots(province);</code>
<code> </code><code>private</code> <code>void</code> <code>setSpots(Integer n){</code>
<code> </code><code>this</code><code>.chk1=(CheckBox)</code><code>this</code><code>.findViewById(R.id.checkBox1);</code>
<code> </code><code>this</code><code>.chk2=(CheckBox)</code><code>this</code><code>.findViewById(R.id.checkBox2);</code>
<code> </code><code>this</code><code>.chk3=(CheckBox)</code><code>this</code><code>.findViewById(R.id.checkBox3);</code>
<code> </code><code>switch</code><code>(n){</code>
<code> </code><code>case</code> <code>1</code><code>:</code>
<code> </code><code>chk1.setText(</code><code>"漠河"</code><code>);</code>
<code> </code><code>chk2.setText(</code><code>"北極村"</code><code>);</code>
<code> </code><code>chk3.setText(</code><code>"九曲十八灣"</code><code>);</code>
<code> </code><code>break</code><code>;</code>
<code> </code><code>case</code> <code>2</code><code>:</code>
<code> </code><code>chk1.setText(</code><code>"長白山"</code><code>);</code>
<code> </code><code>chk2.setText(</code><code>"霧凇島"</code><code>);</code>
<code> </code><code>chk3.setText(</code><code>"北韓自治州"</code><code>);</code>
<code> </code><code>case</code> <code>3</code><code>:</code>
<code> </code><code>chk1.setText(</code><code>"鴨綠江"</code><code>);</code>
<code> </code><code>chk2.setText(</code><code>"筆架山"</code><code>);</code>
<code> </code><code>chk3.setText(</code><code>"鳳凰山"</code><code>);</code>
<code> </code><code>default</code><code>:</code>
<code> </code><code>public</code> <code>void</code> <code>btn_onClick(View view){</code>
<code> </code><code>String spot=</code><code>""</code><code>;</code>
<code> </code><code>if</code><code>(chk1.isChecked())</code>
<code> </code><code>spot+=chk1.getText();</code>
<code> </code><code>if</code><code>(chk2.isChecked())</code>
<code> </code><code>spot+=</code><code>" "</code><code>+chk2.getText();</code>
<code> </code><code>if</code><code>(chk3.isChecked())</code>
<code> </code><code>spot+=</code><code>" "</code><code>+chk3.getText();</code>
<code> </code><code>//通過setResult綁定傳回值</code>
<code> </code><code>Intent intent=</code><code>new</code> <code>Intent();</code>
<code> </code><code>intent.putExtra(</code><code>"spot"</code><code>,spot);</code>
<code> </code><code>setResult(RESULT_OK,intent);</code>
<code> </code><code>//關閉該activity,把傳回值傳回到cordovaPlugin插件</code>
<code> </code><code>this</code><code>.finish();</code>
Activity 視圖
<code><?</code><code>xml</code> <code>version</code><code>=</code><code>"1.0"</code> <code>encoding</code><code>=</code><code>"utf-8"</code><code>?></code>
<code><</code><code>LinearLayout</code> <code>xmlns:android</code><code>=</code><code>"http://schemas.android.com/apk/res/android"</code>
<code> </code><code>android:layout_width</code><code>=</code><code>"match_parent"</code>
<code> </code><code>android:layout_height</code><code>=</code><code>"match_parent"</code>
<code> </code><code>android:layout_alignParentBottom</code><code>=</code><code>"true"</code>
<code> </code><code>android:orientation</code><code>=</code><code>"vertical"</code> <code>></code>
<code> </code><code><</code><code>TextView</code>
<code> </code><code>android:layout_width</code><code>=</code><code>"wrap_content"</code>
<code> </code><code>android:layout_height</code><code>=</code><code>"wrap_content"</code>
<code> </code><code>android:text</code><code>=</code><code>"選擇景點"</code>
<code> </code><code>android:layout_marginTop</code><code>=</code><code>"80dp"</code><code>/></code>
<code> </code><code><</code><code>CheckBox</code>
<code> </code><code>android:id</code><code>=</code><code>"@+id/checkBox1"</code>
<code> </code><code>android:layout_height</code><code>=</code><code>"wrap_content"</code><code>/></code>
<code> </code><code>android:id</code><code>=</code><code>"@+id/checkBox2"</code>
<code> </code><code>android:id</code><code>=</code><code>"@+id/checkBox3"</code>
<code> </code><code><</code><code>Button</code>
<code> </code><code>android:id</code><code>=</code><code>"@+id/button1"</code>
<code> </code><code>style</code><code>=</code><code>"?android:attr/buttonStyleSmall"</code>
<code> </code><code>android:layout_height</code><code>=</code><code>"40dp"</code>
<code> </code><code>android:text</code><code>=</code><code>"确認"</code>
<code> </code><code>android:layout_marginTop</code><code>=</code><code>"20dp"</code>
<code> </code><code>android:onClick</code><code>=</code><code>"btn_onClick"</code><code>/></code>
<code></</code><code>LinearLayout</code><code>></code>
activity 關閉後,cordovaPlugin 插件将 調用回調函數 onActivityResult(int requestCode, int resultCode, Intent intent),回調函數中可根據 resultCode 參數判斷處理情況,根據不同的結果對intent 中的傳回值 bundler 對象進行不同處理。 最後使用 callbackContext 對象中的 success(string) 方法把處理結果回傳到頁面;
處理結果:
本章小結
Cordova(PhoneGap) 技術使用了CordovaPlugin 插件化(子產品化)技術,使用不同插件對不同HTML5頁面進行分别處理。與此同時,系統也可以利用插件調用系統已有的地圖、通信錄、浏覽器等多個API, 與 HTML5 頁面進行資訊交換,真正實作HTML5與Android、iOS系統的無縫對接。
參考文章
<a href="http://www.cnblogs.com/leslies2/p/cordovaPlugin.html" target="_blank">Cordova(PhoneGap)通過CordovaPlugin插件調用 Activity 執行個體</a>
<a href="http://www.cnblogs.com/leslies2/p/4819008.html%20" target="_blank">最新版Cordova 5.1.1(PhoneGap)搭建開發環境</a>
<a href="http://www.cnblogs.com/leslies2/archive/2012/07/23/2603617.html" target="_blank">Apache2.2+Tomcat7.0整合配置詳解</a>
<a href="http://www.cnblogs.com/leslies2/archive/2012/11/15/WindowsServer2008R2_NLB.html" target="_blank">Windows Server 2008 R2 負載平衡入門篇</a>
作者:風塵浪子
<a href="http://www.cnblogs.com/leslies2/p/cordovaPlugin.html" target="_blank">http://www.cnblogs.com/leslies2/p/cordovaPlugin.html</a>
原創作品,轉載時請注明作者及出處
本文轉自 leslies2 51CTO部落格,原文連結:http://blog.51cto.com/79100812/1763118