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

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

最终效果:


项目目录结构:


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

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

index.html

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

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

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

phonegap_messagePlugin.js

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

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

那么,MessagePlugin又指什么呢?

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

MessagePlugin.java

Java代码
  1. packagecom.royal.plugins;
  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. /**
  9. *自定义插件类---短信插件
  10. *@authorRoyal
  11. *
  12. */
  13. publicclassMessagePluginextendsPlugin{
  14. privatestaticfinalStringSEND="send";
  15. @Override
  16. publicPluginResultexecute(Stringaction,JSONArraydata,StringcallbackId){
  17. PluginResultresult=null;
  18. if(SEND.equals(action)){
  19. try{
  20. //手机号
  21. Stringtarget=data.getString(0);
  22. //短信内容
  23. Stringcontent=data.getString(1);
  24. //这里引入的是android.telephony.SmsManager
  25. SmsManagersms=SmsManager.getDefault();
  26. //发送短信
  27. sms.sendTextMessage(target,null,content,null,null);
  28. //封装信息返回给index.html的success(data)函数执行
  29. JSONObjectjsonObj=newJSONObject();
  30. jsonObj.put("target",target);
  31. jsonObj.put("content",content);
  32. //执行成功结果
  33. result=newPluginResult(PluginResult.Status.OK,jsonObj);
  34. }catch(JSONExceptione){
  35. result=newPluginResult(PluginResult.Status.JSON_EXCEPTION);
  36. }
  37. }else{
  38. //无效的执行
  39. result=newPluginResult(PluginResult.Status.INVALID_ACTION);
  40. }
  41. returnresult;
  42. }
  43. }

所以,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. <?xmlversion="1.0"encoding="utf-8"?>
  2. <plugins>
  3. <pluginname="App"value="com.phonegap.App"/>
  4. <pluginname="Geolocation"value="com.phonegap.GeoBroker"/>
  5. <pluginname="Device"value="com.phonegap.Device"/>
  6. <pluginname="Accelerometer"value="com.phonegap.AccelListener"/>
  7. <pluginname="Compass"value="com.phonegap.CompassListener"/>
  8. <pluginname="Media"value="com.phonegap.AudioHandler"/>
  9. <pluginname="Camera"value="com.phonegap.CameraLauncher"/>
  10. <pluginname="Contacts"value="com.phonegap.ContactManager"/>
  11. <pluginname="Crypto"value="com.phonegap.CryptoHandler"/>
  12. <pluginname="File"value="com.phonegap.FileUtils"/>
  13. <pluginname="NetworkStatus"value="com.phonegap.NetworkManager"/>
  14. <pluginname="Notification"value="com.phonegap.Notification"/>
  15. <pluginname="Storage"value="com.phonegap.Storage"/>
  16. <pluginname="Temperature"value="com.phonegap.TempListener"/>
  17. <pluginname="FileTransfer"value="com.phonegap.FileTransfer"/>
  18. <pluginname="Capture"value="com.phonegap.Capture"/>
  19. <!--自定义plugin赋权限-->
  20. <pluginname="MessagePlugin"value="com.royal.plugins.MessagePlugin"/>
  21. </plugins>

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

AndroidManifest.xml

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

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. [Android]照相机范例代码
  3. android编译系统 - pathmap.mk
  4. 自定义Android的Spinner
  5. Android的提交数据到服务器
  6. [转]Android中G-Sensor相关流程
  7. 浅谈Android之SurfaceFlinger相关介绍(二)
  8. Android(安卓)JNI使用和原理分析
  9. 禁掉安卓手机每次运行时都要安装 Unlock、Setting、Android(安卓

随机推荐

  1. AOSP ON MAKO(在NEXUS 4上刷ANDROID 4.4
  2. 下载Android(安卓)源码
  3. Android(安卓)常见问题之 android.conten
  4. 关于ANDROID下载与音乐播放
  5. 关于Android(安卓)traslateAnimation的坐
  6. ubuntu 10.10 编译Android2.2问题解决
  7. Android面试复习资料整理
  8. 定制个性化屏保
  9. 【Android】android的基本UI操作(2)以及小
  10. Android(安卓)RecyclerView最全使用详解