android PhoneGap 自定义插件 发现信息 转

http://royal2xiaose.iteye.com/blog/1555594 

以"发送短信"功能 自定义插件 

 

最终效果:


 

项目目录结构:


 

如何搭建android PhoneGap这里就不提及了。

 

 

首先,index.html中布局,并结合JQuery定义事件。

 

index.html

 

Java代码  收藏代码
  1. <!DOCTYPE HTML>  
  2.   
  3. <html>  
  4. <head>  
  5. <title>PhoneGap</title>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">    
  7. <script type="text/javascript" charset="utf-8" src="../js/jquery-1.7.1.js"></script>  
  8. <script type="text/javascript" charset="utf-8" src="../js/phonegap.js"></script>  
  9. <script type="text/javascript" charset="utf-8" src="../js/phonegap_messagePlugin.js"></script>  
  10.   
  11. <script type="text/javascript">  
  12.     $(function(){  
  13.         var onSend = function(){  
  14.               
  15.             //成功时执行该函数  
  16.             var success = function(data){  
  17.                 alert("tel:" + data.target + "\ncontent:" + data.content);        
  18.             };  
  19.               
  20.             //失败时执行该函数  
  21.             var error = function(e){  
  22.                 alert(e);  
  23.             };  
  24.               
  25.             var tel = $('#tel').val();  
  26.             var content = $('#content').val();  
  27.               
  28.             //message: 自定义phonegap_messagePlugin.js中定义的  
  29.             //send(...)函数: message对象的方法  
  30.             window.plugins.message.send(success,error,tel,content);  
  31.         };  
  32.           
  33.         //发送按钮点击方法绑定  
  34.         $('#send').bind('click',onSend);  
  35.           
  36.     });  
  37. </script>  
  38.   
  39. </head>  
  40.   
  41. <body>  
  42.     <div id="messageDiv">  
  43.         <input id="tel" type="tel" value="5556"/>  
  44.         <textarea id="content" rows="10" cols="25"></textarea>  
  45.         <button id="send" type="button">发送</button>  
  46.     </div>  
  47. </body>  
  48.   
  49. </html>  
 

 

 

接着,那么message从哪里来呢?

 

自定义一个Js文件用来处理我们自己的需要的逻辑

 

phonegap_messagePlugin.js

 

Java代码  收藏代码
  1. var Message = function() {  
  2. };  
  3.   
  4. Message.prototype = {  
  5.           
  6.     send: function(success,error,target,content){  
  7.         //调用MessagePlugin.java 的 send(...)方法  
  8.         PhoneGap.exec(success,error,"MessagePlugin","send",[target,content]);  
  9.     }     
  10. };  
  11.   
  12. PhoneGap.addConstructor(function(){  
  13.     //在PhoneGap中添加插件,注意要在plugins.xml中给它赋权限。  
  14.     PhoneGap.addPlugin("message",new Message);  
  15. });  
 

 

     所以,window.plugins.message.send(....);message其实就是指向这个Message对象,然后在调用它的send函数。

 

 

那么,MessagePlugin又指什么呢?

 

这里就开始插件类的编写了。

 

MessagePlugin.java

Java代码  收藏代码
  1. package com.royal.plugins;  
  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. /** 
  13.  * 自定义插件类---短信插件 
  14.  * @author Royal 
  15.  * 
  16.  */  
  17. public class MessagePlugin extends Plugin{  
  18.   
  19.     private static final String SEND = "send";  
  20.       
  21.     @Override  
  22.     public PluginResult execute(String action, JSONArray data, String callbackId) {  
  23.         PluginResult result = null;  
  24.         if(SEND.equals(action)){  
  25.             try {  
  26.                 //手机号  
  27.                 String target = data.getString(0);  
  28.                 //短信内容  
  29.                 String content = data.getString(1);  
  30.                 //这里引入的是android.telephony.SmsManager  
  31.                 SmsManager sms = SmsManager.getDefault();  
  32.                 //发送短信  
  33.                 sms.sendTextMessage(target, null, content, nullnull);  
  34.                   
  35.                 //封装信息返回给index.html的success(data)函数执行  
  36.                 JSONObject jsonObj = new JSONObject();  
  37.                 jsonObj.put("target", target);  
  38.                 jsonObj.put("content", content);  
  39.                 //执行成功结果  
  40.                 result = new PluginResult(PluginResult.Status.OK,jsonObj);  
  41.             } catch (JSONException e) {  
  42.                 result = new PluginResult(PluginResult.Status.JSON_EXCEPTION);  
  43.             }  
  44.         }else{  
  45.             //无效的执行  
  46.             result = new PluginResult(PluginResult.Status.INVALID_ACTION);  
  47.         }  
  48.         return result;  
  49.     }  
  50.   
  51. }  
 

 

所以,PhoneGap.exec(success,error,"MessagePlugin","send",[target,content]);这句代码

 

其中的MessagePlugin对应的就是上面的MessagePlugin.java这个类,send要对应匹配的就是MessagePlugin.java中execute里面的String action

 

 

最后将MessagePlugin.java这个插件类 在 xml/plugins.xml授权!

 

plugins.xml

Java代码  收藏代码
  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.       
  20.     <!-- 自定义plugin赋权限 -->  
  21.     <plugin name="MessagePlugin" value="com.royal.plugins.MessagePlugin"/>  
  22. </plugins>  
 

同样,既然是发短信,当然也要在AndroidManifest.xml 授权发送短信权限

 

AndroidManifest.xml

Java代码  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="com.royal.plugins"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0" >  
  6.   
  7.     <uses-sdk android:minSdkVersion="8" />  
  8.   
  9.     <!-- PhoneGap权限 -->  
  10.     <supports-screens  
  11.         android:anyDensity="true"  
  12.         android:largeScreens="true"  
  13.         android:normalScreens="true"  
  14.         android:resizeable="true"  
  15.         android:smallScreens="true" />  
  16.   
  17.     <uses-permission android:name="android.permission.CAMERA" />  
  18.     <uses-permission android:name="android.permission.VIBRATE" />  
  19.     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />  
  20.     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  
  21.     <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />  
  22.     <uses-permission android:name="android.permission.READ_PHONE_STATE" />  
  23.     <uses-permission android:name="android.permission.INTERNET" />  
  24.     <uses-permission android:name="android.permission.RECEIVE_SMS" />  
  25.     <uses-permission android:name="android.permission.RECORD_AUDIO" />  
  26.     <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />  
  27.     <uses-permission android:name="android.permission.READ_CONTACTS" />  
  28.     <uses-permission android:name="android.permission.WRITE_CONTACTS" />  
  29.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
  30.     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
  31.       
  32.     <!-- 发短信权限 -->  
  33.     <uses-permission android:name="android.permission.SEND_SMS" />  
  34.   
  35.     <application  
  36.         android:icon="@drawable/ic_launcher"  
  37.         android:label="@string/app_name" >  
  38.         <activity  
  39.             android:name=".PhoneGap_messagePluginActivity"  
  40.             android:configChanges="orientation|keyboardHidden"  
  41.             android:label="@string/app_name" >  
  42.             <intent-filter>  
  43.                 <action android:name="android.intent.action.MAIN" />  
  44.   
  45.                 <category android:name="android.intent.category.LAUNCHER" />  
  46.             </intent-filter>  
  47.         </activity>  
  48.     </application>  
  49.       
  50. </manifest>  

 

posted on 2012-06-16 20:03  民谣  阅读(911)  评论(0编辑  收藏  举报

导航