http://royal2xiaose.iteye.com/blog/1555594
以"发送短信"功能 自定义插件
最终效果:
项目目录结构:
如何搭建android PhoneGap这里就不提及了。
首先,index.html中布局,并结合JQuery定义事件。
index.html
- <!DOCTYPE HTML>
- <html>
- <head>
- <title>PhoneGap</title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <script type="text/javascript" charset="utf-8" src="../js/jquery-1.7.1.js"></script>
- <script type="text/javascript" charset="utf-8" src="../js/phonegap.js"></script>
- <script type="text/javascript" charset="utf-8" src="../js/phonegap_messagePlugin.js"></script>
- <script type="text/javascript">
- $(function(){
- var onSend = function(){
- //成功时执行该函数
- var success = function(data){
- alert("tel:" + data.target + "\ncontent:" + data.content);
- };
- //失败时执行该函数
- var error = function(e){
- alert(e);
- };
- var tel = $('#tel').val();
- var content = $('#content').val();
- //message: 自定义phonegap_messagePlugin.js中定义的
- //send(...)函数: message对象的方法
- window.plugins.message.send(success,error,tel,content);
- };
- //发送按钮点击方法绑定
- $('#send').bind('click',onSend);
- });
- </script>
- </head>
- <body>
- <div id="messageDiv">
- <input id="tel" type="tel" value="5556"/>
- <textarea id="content" rows="10" cols="25"></textarea>
- <button id="send" type="button">发送</button>
- </div>
- </body>
- </html>
接着,那么message从哪里来呢?
自定义一个Js文件用来处理我们自己的需要的逻辑
phonegap_messagePlugin.js
- var Message = function() {
- };
- Message.prototype = {
- send: function(success,error,target,content){
- //调用MessagePlugin.java 的 send(...)方法
- PhoneGap.exec(success,error,"MessagePlugin","send",[target,content]);
- }
- };
- PhoneGap.addConstructor(function(){
- //在PhoneGap中添加插件,注意要在plugins.xml中给它赋权限。
- PhoneGap.addPlugin("message",new Message);
- });
所以,window.plugins.message.send(....);message其实就是指向这个Message对象,然后在调用它的send函数。
那么,MessagePlugin又指什么呢?
这里就开始插件类的编写了。
MessagePlugin.java
- package com.royal.plugins;
- 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;
- /**
- * 自定义插件类---短信插件
- * @author Royal
- *
- */
- public class MessagePlugin extends Plugin{
- private static final String SEND = "send";
- @Override
- public PluginResult execute(String action, JSONArray data, String callbackId) {
- PluginResult result = null;
- if(SEND.equals(action)){
- try {
- //手机号
- String target = data.getString(0);
- //短信内容
- String content = data.getString(1);
- //这里引入的是android.telephony.SmsManager
- SmsManager sms = SmsManager.getDefault();
- //发送短信
- sms.sendTextMessage(target, null, content, null, null);
- //封装信息返回给index.html的success(data)函数执行
- JSONObject jsonObj = new JSONObject();
- jsonObj.put("target", target);
- jsonObj.put("content", content);
- //执行成功结果
- result = new PluginResult(PluginResult.Status.OK,jsonObj);
- } catch (JSONException e) {
- result = new PluginResult(PluginResult.Status.JSON_EXCEPTION);
- }
- }else{
- //无效的执行
- result = new PluginResult(PluginResult.Status.INVALID_ACTION);
- }
- return result;
- }
- }
所以,PhoneGap.exec(success,error,"MessagePlugin","send",[target,content]);这句代码
其中的MessagePlugin对应的就是上面的MessagePlugin.java这个类,send要对应匹配的就是MessagePlugin.java中execute里面的String action
最后将MessagePlugin.java这个插件类 在 xml/plugins.xml授权!
plugins.xml
- <?xml version="1.0" encoding="utf-8"?>
- <plugins>
- <plugin name="App" value="com.phonegap.App"/>
- <plugin name="Geolocation" value="com.phonegap.GeoBroker"/>
- <plugin name="Device" value="com.phonegap.Device"/>
- <plugin name="Accelerometer" value="com.phonegap.AccelListener"/>
- <plugin name="Compass" value="com.phonegap.CompassListener"/>
- <plugin name="Media" value="com.phonegap.AudioHandler"/>
- <plugin name="Camera" value="com.phonegap.CameraLauncher"/>
- <plugin name="Contacts" value="com.phonegap.ContactManager"/>
- <plugin name="Crypto" value="com.phonegap.CryptoHandler"/>
- <plugin name="File" value="com.phonegap.FileUtils"/>
- <plugin name="Network Status" value="com.phonegap.NetworkManager"/>
- <plugin name="Notification" value="com.phonegap.Notification"/>
- <plugin name="Storage" value="com.phonegap.Storage"/>
- <plugin name="Temperature" value="com.phonegap.TempListener"/>
- <plugin name="FileTransfer" value="com.phonegap.FileTransfer"/>
- <plugin name="Capture" value="com.phonegap.Capture"/>
- <!-- 自定义plugin赋权限 -->
- <plugin name="MessagePlugin" value="com.royal.plugins.MessagePlugin"/>
- </plugins>
同样,既然是发短信,当然也要在AndroidManifest.xml 授权发送短信权限
AndroidManifest.xml
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.royal.plugins"
- android:versionCode="1"
- android:versionName="1.0" >
- <uses-sdk android:minSdkVersion="8" />
- <!-- PhoneGap权限 -->
- <supports-screens
- android:anyDensity="true"
- android:largeScreens="true"
- android:normalScreens="true"
- android:resizeable="true"
- android:smallScreens="true" />
- <uses-permission android:name="android.permission.CAMERA" />
- <uses-permission android:name="android.permission.VIBRATE" />
- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
- <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
- <uses-permission android:name="android.permission.READ_PHONE_STATE" />
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.RECEIVE_SMS" />
- <uses-permission android:name="android.permission.RECORD_AUDIO" />
- <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
- <uses-permission android:name="android.permission.READ_CONTACTS" />
- <uses-permission android:name="android.permission.WRITE_CONTACTS" />
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- <!-- 发短信权限 -->
- <uses-permission android:name="android.permission.SEND_SMS" />
- <application
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name" >
- <activity
- android:name=".PhoneGap_messagePluginActivity"
- android:configChanges="orientation|keyboardHidden"
- android:label="@string/app_name" >
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
- </manifest>