phoneGap插件 .

   目前PhoneGap雖然提供了很多的API,但是我們也很容易發現,他有很多地方不能滿足我們的需求,比如發短信。我也將介紹如何開發一個針對PhoneGap發短信的Plugin。(Android 版本)。
1、創建一個Android工程,創建之後的目錄結構如圖:


2、把PhoneGap的android版jar包、javascript和xml文件夾加入工程。(參照上一篇中的做法)目錄結構:


3、新增一個類MessagePlugin
這個類就是負責發送短信功能的具體類,可以調用發送短信的android API,當然如果是其他功能,則調用相應的API,但是當使用這個API時記得申請權限。
具體代碼:
Java代碼 複製代碼 收藏代碼
  1. package com.phonegap.kiddyu.plugin; 
  2.  
  3. import org.json.JSONArray; 
  4. import org.json.JSONException; 
  5. import org.json.JSONObject; 
  6.  
  7. import android.telephony.SmsManager; 
  8.  
  9. import com.phonegap.api.Plugin; 
  10. import com.phonegap.api.PluginResult; 
  11.  
  12. public class MessagePlugin extends Plugin { 
  13.      
  14.     private static final String SEND = "send"
  15.      
  16.     @Override 
  17.     public PluginResult execute(String action, JSONArray data, String callbackId) { 
  18.         PluginResult result; 
  19.         if (SEND.equals(action)) { 
  20.             try
  21.                 JSONObject jsonObj = new JSONObject(); 
  22.                 String target = data.getString(0); 
  23.                 String content = data.getString(1); 
  24.                 SmsManager sms = SmsManager.getDefault(); 
  25.                 sms.sendTextMessage(target, null, content, null, null); 
  26.                 jsonObj.put("target", target); 
  27.                 jsonObj.put("content", content); 
  28.                 result = new PluginResult(PluginResult.Status.OK, jsonObj); 
  29.             } catch (JSONException ex) { 
  30.                 result = new PluginResult(PluginResult.Status.JSON_EXCEPTION); 
  31.             }catch(IllegalArgumentException ex){ 
  32.                 result = new PluginResult(PluginResult.Status.ERROR); 
  33.             } 
  34.         } else
  35.             result = new PluginResult(PluginResult.Status.INVALID_ACTION); 
  36.         } 
  37.  
  38.         return result; 
  39.     } 
  40.  
  1. package com.phonegap.kiddyu.plugin;  
  2.   
  3. import org.json.JSONArray;  
  4. import org.json.JSONException;  
  5. import org.json.JSONObject;  
  6.   
  7. import android.telephony.SmsManager;  
  8.   
  9. import com.phonegap.api.Plugin;  
  10. import com.phonegap.api.PluginResult;  
  11.   
  12. public class MessagePlugin extends Plugin {  
  13.       
  14.     private static final String SEND = "send";  
  15.       
  16.     @Override  
  17.     public PluginResult execute(String action, JSONArray data, String callbackId) {  
  18.         PluginResult result;  
  19.         if (SEND.equals(action)) {  
  20.             try {  
  21.                 JSONObject jsonObj = new JSONObject();  
  22.                 String target = data.getString(0);  
  23.                 String content = data.getString(1);  
  24.                 SmsManager sms = SmsManager.getDefault();  
  25.                 sms.sendTextMessage(target, null, content, nullnull);  
  26.                 jsonObj.put("target", target);  
  27.                 jsonObj.put("content", content);  
  28.                 result = new PluginResult(PluginResult.Status.OK, jsonObj);  
  29.             } catch (JSONException ex) {  
  30.                 result = new PluginResult(PluginResult.Status.JSON_EXCEPTION);  
  31.             }catch(IllegalArgumentException ex){  
  32.                 result = new PluginResult(PluginResult.Status.ERROR);  
  33.             }  
  34.         } else {  
  35.             result = new PluginResult(PluginResult.Status.INVALID_ACTION);  
  36.         }  
  37.   
  38.         return result;  
  39.     }  
  40.   
  41. }  
package com.phonegap.kiddyu.plugin;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.telephony.SmsManager;

import com.phonegap.api.Plugin;
import com.phonegap.api.PluginResult;

public class MessagePlugin extends Plugin {
	
	private static final String SEND = "send";
	
	@Override
	public PluginResult execute(String action, JSONArray data, String callbackId) {
		PluginResult result;
		if (SEND.equals(action)) {
			try {
				JSONObject jsonObj = new JSONObject();
				String target = data.getString(0);
				String content = data.getString(1);
				SmsManager sms = SmsManager.getDefault();
				sms.sendTextMessage(target, null, content, null, null);
				jsonObj.put("target", target);
				jsonObj.put("content", content);
				result = new PluginResult(PluginResult.Status.OK, jsonObj);
			} catch (JSONException ex) {
				result = new PluginResult(PluginResult.Status.JSON_EXCEPTION);
			}catch(IllegalArgumentException ex){
				result = new PluginResult(PluginResult.Status.ERROR);
			}
		} else {
			result = new PluginResult(PluginResult.Status.INVALID_ACTION);
		}

		return result;
	}

}


4、爲phonegap增加一個javascript的API
在工程目錄www/js下面增加一個javascript文件:phonegapPlugin.js,然後加入代碼:
Javascript代碼 複製代碼 收藏代碼
  1. var Message = function(){}; 
  2.  
  3. Message.prototype = { 
  4.         send: function(success, error, target, content){ 
  5.             PhoneGap.exec(success, error, "MessagePlugin", "send", [target, content]); 
  6.         } 
  7. }; 
  8.  
  9. PhoneGap.addConstructor(function() { 
  10.     PhoneGap.addPlugin("message", new Message()); 
  11. }); 
  1. var Message = function(){};  
  2.   
  3. Message.prototype = {  
  4.         send: function(success, error, target, content){  
  5.             PhoneGap.exec(success, error, "MessagePlugin""send", [target, content]);  
  6.         }  
  7. };  
  8.   
  9. PhoneGap.addConstructor(function() {  
  10.     PhoneGap.addPlugin("message"new Message());  
  11. });  
var Message = function(){};

Message.prototype = {
		send: function(success, error, target, content){
			PhoneGap.exec(success, error, "MessagePlugin", "send", [target, content]);
		}
};

PhoneGap.addConstructor(function() {
	PhoneGap.addPlugin("message", new Message());
});


關鍵的方法是PhoneGap.exec(success, error, "MessagePlugin", "send", [target, content]);
做一下簡單的介紹:
success:方法執行成功時調用該函數;
error:方法執行失敗時調用該函數;
"MessagePlugin":類名,最好與前面創建的Java類一個樣;
"send":插件類中的參數String action;
[target, content]:一個數據,插件類中的參數JSONObject data;

PhoneGap.addPlugin("message", new Message());中的"Message"是你調用send方法時的實例名稱。(不知道這樣叫是否準確)


5、將自己的插件加入到PhoneGap的配置中
打開目錄中res/xml/plugins.xml文件,在最後面加上
<plugin name="MessagePlugin" value="com.phonegap.kiddyu.plugin.MessagePlugin"/>
注意name要和你的插件類名一致! value是類的包名.類名。

插件到這裏就算完成了,讓我們測試一下到底能不能工作吧。
加入一個簡單的html頁面(上一篇已經介紹怎麼開發,這裏不做重複介紹),代碼參照下面:
Html代碼 複製代碼 收藏代碼
  1. <!DOCTYPE html> 
  2. <html> 
  3. <head> 
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  5. <script type="text/javascript" charset="utf-8" src="../js/jquery_1_6_4.js"></script> 
  6. <script type="text/javascript" charset="utf-8" src="../js/phonegap-1.2.0.js"></script> 
  7. <script type="text/javascript" charset="utf-8" src="../js/phonegapPlugin.js"></script> 
  8. <script type="text/javascript"> 
  9.     $(function(){ 
  10.         var onSend = function(){ 
  11.              
  12.             var success = function(data){ 
  13.                 alert("tel : " + data.target + ', and content : ' + data.content); 
  14.             }; 
  15.              
  16.             var error = function(e){ 
  17.                 alert(e); 
  18.             }; 
  19.              
  20.             var tel = $('#tel').val(); 
  21.             var content = $('#content').val(); 
  22.             window.plugins.message.send(success, error, tel, content); 
  23.         }; 
  24.          
  25.         $('#send').bind('click', onSend); 
  26.     }); 
  27. </script> 
  28. </head> 
  29. <body> 
  30.     <div id="messageDiv"> 
  31.         <input type="tel" id="tel" value="5556" /> 
  32.         <textarea rows="20" cols="25" id="content"></textarea> 
  33.         <button type="button" id="send">Send Me</button> 
  34.     </div> 
  35. </body> 
  36. </html> 
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5. <script type="text/javascript" charset="utf-8" src="../js/jquery_1_6_4.js"></script>  
  6. <script type="text/javascript" charset="utf-8" src="../js/phonegap-1.2.0.js"></script>  
  7. <script type="text/javascript" charset="utf-8" src="../js/phonegapPlugin.js"></script>  
  8. <script type="text/javascript">  
  9.     $(function(){  
  10.         var onSend = function(){  
  11.               
  12.             var success = function(data){  
  13.                 alert("tel : " + data.target + ', and content : ' + data.content);  
  14.             };  
  15.               
  16.             var error = function(e){  
  17.                 alert(e);  
  18.             };  
  19.               
  20.             var tel = $('#tel').val();  
  21.             var content = $('#content').val();  
  22.             window.plugins.message.send(success, error, tel, content);  
  23.         };  
  24.           
  25.         $('#send').bind('click', onSend);  
  26.     });  
  27. </script>  
  28. </head>  
  29. <body>  
  30.     <div id="messageDiv">  
  31.         <input type="tel" id="tel" value="5556" />  
  32.         <textarea rows="20" cols="25" id="content"></textarea>  
  33.         <button type="button" id="send">Send Me</button>  
  34.     </div>  
  35. </body>  
  36. </html>  
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" charset="utf-8" src="../js/jquery_1_6_4.js"></script>
<script type="text/javascript" charset="utf-8" src="../js/phonegap-1.2.0.js"></script>
<script type="text/javascript" charset="utf-8" src="../js/phonegapPlugin.js"></script>
<script type="text/javascript">
	$(function(){
		var onSend = function(){
			
			var success = function(data){
				alert("tel : " + data.target + ', and content : ' + data.content);
			};
			
			var error = function(e){
				alert(e);
			};
			
			var tel = $('#tel').val();
			var content = $('#content').val();
			window.plugins.message.send(success, error, tel, content);
		};
		
		$('#send').bind('click', onSend);
	});
</script>
</head>
<body>
	<div id="messageDiv">
		<input type="tel" id="tel" value="5556" />
		<textarea rows="20" cols="25" id="content"></textarea>
		<button type="button" id="send">Send Me</button>
	</div>
</body>
</html>


注意在頁面中加入你自己的phonegapPlugin.js,而且順序必須在phonegap.js之後。
其他的都參照上一篇中,修改自己的Activity就開始測試吧!一下是測試截圖:



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章