目前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. import org.json.JSONArray;
  3. import org.json.JSONException;
  4. import org.json.JSONObject;
  5. import android.telephony.SmsManager;
  6. import com.phonegap.api.Plugin;
  7. import com.phonegap.api.PluginResult;
  8. public class MessagePlugin extends Plugin {
  9. private static final String SEND = "send";
  10. @Override
  11. public PluginResult execute(String action, JSONArray data, String callbackId) {
  12. PluginResult result;
  13. if (SEND.equals(action)) {
  14. try {
  15. JSONObject jsonObj = new JSONObject();
  16. String target = data.getString(0);
  17. String content = data.getString(1);
  18. SmsManager sms = SmsManager.getDefault();
  19. sms.sendTextMessage(target, null, content, null, null);
  20. jsonObj.put("target", target);
  21. jsonObj.put("content", content);
  22. result = new PluginResult(PluginResult.Status.OK, jsonObj);
  23. } catch (JSONException ex) {
  24. result = new PluginResult(PluginResult.Status.JSON_EXCEPTION);
  25. }catch(IllegalArgumentException ex){
  26. result = new PluginResult(PluginResult.Status.ERROR);
  27. }
  28. } else {
  29. result = new PluginResult(PluginResult.Status.INVALID_ACTION);
  30. }
  31. return result;
  32. }
  33. }
[java] view plain copy print ?
  1. packagecom.phonegap.kiddyu.plugin;
  2. importorg.json.JSONArray;
  3. importorg.json.JSONException;
  4. importorg.json.JSONObject;
  5. importandroid.telephony.SmsManager;
  6. importcom.phonegap.api.Plugin;
  7. importcom.phonegap.api.PluginResult;
  8. publicclassMessagePluginextendsPlugin{
  9. privatestaticfinalStringSEND="send";
  10. @Override
  11. publicPluginResultexecute(Stringaction,JSONArraydata,StringcallbackId){
  12. PluginResultresult;
  13. if(SEND.equals(action)){
  14. try{
  15. JSONObjectjsonObj=newJSONObject();
  16. Stringtarget=data.getString(0);
  17. Stringcontent=data.getString(1);
  18. SmsManagersms=SmsManager.getDefault();
  19. sms.sendTextMessage(target,null,content,null,null);
  20. jsonObj.put("target",target);
  21. jsonObj.put("content",content);
  22. result=newPluginResult(PluginResult.Status.OK,jsonObj);
  23. }catch(JSONExceptionex){
  24. result=newPluginResult(PluginResult.Status.JSON_EXCEPTION);
  25. }catch(IllegalArgumentExceptionex){
  26. result=newPluginResult(PluginResult.Status.ERROR);
  27. }
  28. }else{
  29. result=newPluginResult(PluginResult.Status.INVALID_ACTION);
  30. }
  31. returnresult;
  32. }
  33. }


4、为phonegap增加一个javascript的API
在工程目录www/js下面增加一个javascript文件:phonegapPlugin.js,然后加入代码:
Javascript代码
  1. var Message = function(){};
  2. Message.prototype = {
  3. send: function(success, error, target, content){
  4. PhoneGap.exec(success, error, "MessagePlugin", "send", [target, content]);
  5. }
  6. };
  7. PhoneGap.addConstructor(function() {
  8. PhoneGap.addPlugin("message", new Message());
  9. });
[javascript] view plain copy print ?
  1. varMessage=function(){};
  2. Message.prototype={
  3. send:function(success,error,target,content){
  4. PhoneGap.exec(success,error,"MessagePlugin","send",[target,content]);
  5. }
  6. };
  7. PhoneGap.addConstructor(function(){
  8. PhoneGap.addPlugin("message",newMessage());
  9. });


关键的方法是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. var success = function(data){
  12. alert("tel : " + data.target + ', and content : ' + data.content);
  13. };
  14. var error = function(e){
  15. alert(e);
  16. };
  17. var tel = $('#tel').val();
  18. var content = $('#content').val();
  19. window.plugins.message.send(success, error, tel, content);
  20. };
  21. $('#send').bind('click', onSend);
  22. });
  23. </script>
  24. </head>
  25. <body>
  26. <div id="messageDiv">
  27. <input type="tel" id="tel" value="5556" />
  28. <textarea rows="20" cols="25" id="content"></textarea>
  29. <button type="button" id="send">Send Me</button>
  30. </div>
  31. </body>
  32. </html>
[html] view plain copy print ?
  1. <!DOCTYPEhtml>
  2. <html>
  3. <head>
  4. <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
  5. <scripttype="text/javascript"charset="utf-8"src="../js/jquery_1_6_4.js"></script>
  6. <scripttype="text/javascript"charset="utf-8"src="../js/phonegap-1.2.0.js"></script>
  7. <scripttype="text/javascript"charset="utf-8"src="../js/phonegapPlugin.js"></script>
  8. <scripttype="text/javascript">
  9. $(function(){
  10. varonSend=function(){
  11. varsuccess=function(data){
  12. alert("tel:"+data.target+',andcontent:'+data.content);
  13. };
  14. varerror=function(e){
  15. alert(e);
  16. };
  17. vartel=$('#tel').val();
  18. varcontent=$('#content').val();
  19. window.plugins.message.send(success,error,tel,content);
  20. };
  21. $('#send').bind('click',onSend);
  22. });
  23. </script>
  24. </head>
  25. <body>
  26. <divid="messageDiv">
  27. <inputtype="tel"id="tel"value="5556"/>
  28. <textarearows="20"cols="25"id="content"></textarea>
  29. <buttontype="button"id="send">SendMe</button>
  30. </div>
  31. </body>
  32. </html>


注意在页面中加入你自己的phonegapPlugin.js,而且顺序必须在phonegap.js之后。
其他的都参照上一篇中,修改自己的Activity就开始测试吧!一下是测试截图:



更多相关文章

  1. 深入浅出RxJava——在Android中使用响应式编程
  2. android之NDK环境小试牛刀
  3. Android(安卓)Intent的几种用法全面总结
  4. Android(安卓)完美退出 App 方法
  5. android 中设置http请求头headers的Cookie
  6. android优化实战(一)-从递归到迭代
  7. Android(安卓)Kotlin的使用及简单实例
  8. system 权限程序不能访问sd卡问题
  9. Android热修复(微信tinker的集成)

随机推荐

  1. Android读写XML(下)——创建XML文档
  2. android Content Provider
  3. 使用 Eclipse PhoneGap 构建 Android(安
  4. Android体验系列之--Gallery控件
  5. 我的Android进阶之旅------>Android拍照
  6. Android编译中m、mm、mmm的区别
  7. android组建属性及使用许可
  8. android下抓包
  9. Android开始-3G应用之android
  10. Android开发:Android设备传感器开发总结