您的位置:首页 > 移动开发 > Android开发

android phonegap自定义插件 发送短信

2013-04-28 17:00 375 查看
以"发送短信"功能 自定义插件

最终效果:



项目目录结构:



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

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

index.html

Java代码



<!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

Java代码



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

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

Java代码



<?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

Java代码



<?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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: