android PhoneGap 自定义插件 发现信息 转
16lz
2021-01-25
http://royal2xiaose.iteye.com/blog/1555594
以"发送短信"功能自定义插件
最终效果:
项目目录结构:
如何搭建android PhoneGap这里就不提及了。
首先,index.html中布局,并结合JQuery定义事件。
index.html
Java代码- <!DOCTYPEHTML>
- <html>
- <head>
- <title>PhoneGap</title>
- <metahttp-equiv="Content-Type"content="text/html;charset=utf-8">
- <scripttype="text/javascript"charset="utf-8"src="../js/jquery-1.7.1.js"></script>
- <scripttype="text/javascript"charset="utf-8"src="../js/phonegap.js"></script>
- <scripttype="text/javascript"charset="utf-8"src="../js/phonegap_messagePlugin.js"></script>
- <scripttype="text/javascript">
- $(function(){
- varonSend=function(){
- //成功时执行该函数
- varsuccess=function(data){
- alert("tel:"+data.target+"\ncontent:"+data.content);
- };
- //失败时执行该函数
- varerror=function(e){
- alert(e);
- };
- vartel=$('#tel').val();
- varcontent=$('#content').val();
- //message:自定义phonegap_messagePlugin.js中定义的
- //send(...)函数:message对象的方法
- window.plugins.message.send(success,error,tel,content);
- };
- //发送按钮点击方法绑定
- $('#send').bind('click',onSend);
- });
- </script>
- </head>
- <body>
- <divid="messageDiv">
- <inputid="tel"type="tel"value="5556"/>
- <textareaid="content"rows="10"cols="25"></textarea>
- <buttonid="send"type="button">发送</button>
- </div>
- </body>
- </html>
接着,那么message从哪里来呢?
自定义一个Js文件用来处理我们自己的需要的逻辑
phonegap_messagePlugin.js
Java代码- varMessage=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",newMessage);
- });
所以,window.plugins.message.send(....);message其实就是指向这个Message对象,然后在调用它的send函数。
那么,MessagePlugin又指什么呢?
这里就开始插件类的编写了。
MessagePlugin.java
Java代码- packagecom.royal.plugins;
- importorg.json.JSONArray;
- importorg.json.JSONException;
- importorg.json.JSONObject;
- importandroid.telephony.SmsManager;
- importcom.phonegap.api.Plugin;
- importcom.phonegap.api.PluginResult;
- /**
- *自定义插件类---短信插件
- *@authorRoyal
- *
- */
- publicclassMessagePluginextendsPlugin{
- privatestaticfinalStringSEND="send";
- @Override
- publicPluginResultexecute(Stringaction,JSONArraydata,StringcallbackId){
- PluginResultresult=null;
- if(SEND.equals(action)){
- try{
- //手机号
- Stringtarget=data.getString(0);
- //短信内容
- Stringcontent=data.getString(1);
- //这里引入的是android.telephony.SmsManager
- SmsManagersms=SmsManager.getDefault();
- //发送短信
- sms.sendTextMessage(target,null,content,null,null);
- //封装信息返回给index.html的success(data)函数执行
- JSONObjectjsonObj=newJSONObject();
- jsonObj.put("target",target);
- jsonObj.put("content",content);
- //执行成功结果
- result=newPluginResult(PluginResult.Status.OK,jsonObj);
- }catch(JSONExceptione){
- result=newPluginResult(PluginResult.Status.JSON_EXCEPTION);
- }
- }else{
- //无效的执行
- result=newPluginResult(PluginResult.Status.INVALID_ACTION);
- }
- returnresult;
- }
- }
所以,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代码- <?xmlversion="1.0"encoding="utf-8"?>
- <plugins>
- <pluginname="App"value="com.phonegap.App"/>
- <pluginname="Geolocation"value="com.phonegap.GeoBroker"/>
- <pluginname="Device"value="com.phonegap.Device"/>
- <pluginname="Accelerometer"value="com.phonegap.AccelListener"/>
- <pluginname="Compass"value="com.phonegap.CompassListener"/>
- <pluginname="Media"value="com.phonegap.AudioHandler"/>
- <pluginname="Camera"value="com.phonegap.CameraLauncher"/>
- <pluginname="Contacts"value="com.phonegap.ContactManager"/>
- <pluginname="Crypto"value="com.phonegap.CryptoHandler"/>
- <pluginname="File"value="com.phonegap.FileUtils"/>
- <pluginname="NetworkStatus"value="com.phonegap.NetworkManager"/>
- <pluginname="Notification"value="com.phonegap.Notification"/>
- <pluginname="Storage"value="com.phonegap.Storage"/>
- <pluginname="Temperature"value="com.phonegap.TempListener"/>
- <pluginname="FileTransfer"value="com.phonegap.FileTransfer"/>
- <pluginname="Capture"value="com.phonegap.Capture"/>
- <!--自定义plugin赋权限-->
- <pluginname="MessagePlugin"value="com.royal.plugins.MessagePlugin"/>
- </plugins>
同样,既然是发短信,当然也要在AndroidManifest.xml 授权发送短信权限
AndroidManifest.xml
Java代码- <?xmlversion="1.0"encoding="utf-8"?>
- <manifestxmlns:android="http://schemas.android.com/apk/res/android"
- package="com.royal.plugins"
- android:versionCode="1"
- android:versionName="1.0">
- <uses-sdkandroid:minSdkVersion="8"/>
- <!--PhoneGap权限-->
- <supports-screens
- android:anyDensity="true"
- android:largeScreens="true"
- android:normalScreens="true"
- android:resizeable="true"
- android:smallScreens="true"/>
- <uses-permissionandroid:name="android.permission.CAMERA"/>
- <uses-permissionandroid:name="android.permission.VIBRATE"/>
- <uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"/>
- <uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/>
- <uses-permissionandroid:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
- <uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>
- <uses-permissionandroid:name="android.permission.INTERNET"/>
- <uses-permissionandroid:name="android.permission.RECEIVE_SMS"/>
- <uses-permissionandroid:name="android.permission.RECORD_AUDIO"/>
- <uses-permissionandroid:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
- <uses-permissionandroid:name="android.permission.READ_CONTACTS"/>
- <uses-permissionandroid:name="android.permission.WRITE_CONTACTS"/>
- <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
- <uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>
- <!--发短信权限-->
- <uses-permissionandroid: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>
- <actionandroid:name="android.intent.action.MAIN"/>
- <categoryandroid:name="android.intent.category.LAUNCHER"/>
- </intent-filter>
- </activity>
- </application>
- </manifest>
更多相关文章
- 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
- [Android]照相机范例代码
- android编译系统 - pathmap.mk
- 自定义Android的Spinner
- Android的提交数据到服务器
- [转]Android中G-Sensor相关流程
- 浅谈Android之SurfaceFlinger相关介绍(二)
- Android(安卓)JNI使用和原理分析
- 禁掉安卓手机每次运行时都要安装 Unlock、Setting、Android(安卓